0

我对 iOS 开发很陌生,因此对 iOS 的概念storyboard也很陌生。由于这似乎是“新事物”,每个人都应该使用,我想我也可以尝试一下。

我在这里有一个项目,用一个Foo.xib文件创建。

xib文件包含几个view对象。

然后我有一个班级Foo.hFoo.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像我做“旧方式”一样将所有视图包含在一个视图中?

4

1 回答 1

0

有一个巨大的错误概念是,当使用故事板时,它会限制你能做什么。故事板就像一组 .xib 文件,它在一个文件中包含许多屏幕,因此您可以在一个地方查看应用程序的整个流程。在情节提要中,您可以创建单个 viewController 并为其分配自定义 viewController 类,然后像上面所做的那样在此 viewController 的代码中加载/修改您喜欢的任何内容。

然而,使用故事板的好处是拥有多个 viewController 对象,因此您可以设计所有可以看到的屏幕和导航,帮助您进行调试和设计工作。

如果您已经让应用程序在没有故事板的情况下工作,并且您只是想使用它,因为它是新的但保留了旧的编码风格,那么您将看不到太多好处。我建议按照开发人员库中的这个示例来了解如何正确使用情节提要。完成此操作后,您将看到新样式的好处,您可以决定是在代码中还是使用界面构建器:http: //developer.apple.com/library/ios/#documentation/iPhone/Conceptual/ SecondiOSAppTutorial/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011318

于 2013-05-25T18:47:46.973 回答