2013-05-25 5 views
0

Я довольно новичок в разработке iOS и, следовательно, новичок в концепции storyboard. Поскольку это, кажется, «новая вещь», каждый должен использовать, я думал, что могу попробовать.Создание и загрузка представлений с помощью раскадровки

У меня есть проект, созданный с помощью файла Foo.xib.

xib файл имеет несколько view объектов в комплекте.

Тогда у меня есть класс Foo.h и Foo.m класс с следующим содержанием:

Foo.h

#import <UIKit/UIKit.h> 

@interface Foo : UIView 
@property (strong, nonatomic) IBOutlet UIView *view01; 
@property (strong, nonatomic) IBOutlet UIView *view02; 
@property (strong, nonatomic) IBOutlet UIView *view03; 
@property (strong, nonatomic) IBOutlet UIView *view04; 

- (NSUInteger)viewCount; 

@end 

Foo.m

#import "Foo.h" 

@interface Foo() 
@property (nonatomic, strong) NSArray *views; 
@end 

@implementation Foo 

- (id)init { 
    self = [super init]; 
    if (self) { 
     self.views = [[NSBundle mainBundle] loadNibNamed:@"Foo" owner:self options:nil]; 
    } 
    return self; 
} 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

- (NSUInteger)viewCount { 
    return [self.views count]; 
} 

@end 

В моей ViewController я бы затем загрузить все мнения и сделать его прокручиваемый, например:

#import "ViewController.h" 
#import "Foo.h" 

@interface ViewController() 
@property (nonatomic, strong) UIScrollView *scrollView; 
@property (nonatomic, strong) Foo *views; 
@end 

@implementation ViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 

    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.views = [[Foo alloc] init]; 
    CGSize fooSize = self.views.view01.bounds.size; 
    NSUInteger viewCount = [self.views viewCount]; 
    self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, fooSize.width, fooSize.height)]; 
    [self.scrollView setContentSize:CGSizeMake(viewCount*fooSize.width, fooSize.height)]; 
    [self.scrollView setBounces:YES]; 
    [self.scrollView setPagingEnabled:YES]; 
    self.scrollView.delegate = self; 

    NSArray *views = @[ self.views.view01, 
         self.views.view02, 
         self.views.view03, 
         self.views.view04 
         ]; 

    for (int i=0; i<viewCount; i++) { 
     UIView *curView = views[i]; 
     CGRect frame = curView.frame; 
     frame.origin.x = i*fooSize.width; 
     frame.origin.y = 0; 
     curView.frame = frame; 
     [self.scrollView addSubview:curView]; 
    } 

    [self.view addSubview:self.scrollView]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

Однако у меня нет подсказки, как реализовать это с помощью раскадровки. Мне кажется, что я должен иметь NavigationController, который затем связан с Master View Controller. И теперь мне нужно будет добавить новый ViewController для каждого вида? Или есть способ включить все представления в один ViewController, как я сделал «старый способ»?

+0

не забывайте поднимать/отмечать как верхний ответ, если мой ответ был решен ваш вопрос. в противном случае оставляют некоторые дополнительные комментарии/вопросы –

ответ

0

Существует массовое неправильное представление о том, что при использовании раскадровки он ограничивает вас тем, что вы можете делать. Раскадровка - это просто массив файлов .xib, он содержит много экранов в одном файле, поэтому вы можете увидеть весь поток вашего приложения в одном месте. Внутри раскадровки вы можете создать единый viewController и назначить для него собственный класс viewController, а затем загрузить/изменить то, что вам нравится в коде этого viewController, как вы это делали выше.

Однако преимущество использования раскадровки состоит в том, чтобы иметь несколько объектов viewController, чтобы вы могли проектировать все экраны и навигацию, если бы вы могли видеть это, помогая вам в отладке и разработке.

Если у вас уже есть приложение, работающее без раскадровки, и вы просто хотите использовать его, потому что его новый, но сохраните старый стиль кодирования, вы не увидите много преимуществ. Я бы предложил следующий пример из библиотеки разработчиков о том, как правильно использовать раскадровку. После того, как вы это сделаете, вы увидите преимущества нового стиля, и вы можете решить, делать это в коде или с помощью конструктора интерфейса: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/SecondiOSAppTutorial/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011318

Смежные вопросы