我对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