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または、私が「古い方法」で行ったように、すべてのビューを 1 つに含める方法はありますか?

4

1 に答える 1

0

ストーリーボードを使用すると、できることが制限されるという大きな誤解があります。ストーリーボードは単純に .xib ファイルの配列のようなものです。1 つのファイルに多くの画面が含まれているため、アプリのフロー全体を 1 か所で確認できます。ストーリーボード内では、単一の viewController を作成し、それにカスタム viewController クラスを割り当ててから、上記で行ったように、この viewController のコード内で好きなものをロード/変更できます。

ただし、ストーリーボードを使用する利点は、複数の viewController オブジェクトを使用できるため、表示可能なすべての画面とナビゲーションを設計できるため、デバッグや設計作業に役立ちます。

既にストーリーボードなしで動作するアプリがあり、単にそれを使用したいだけの場合は、新しいが古いスタイルのコーディングを維持する場合、多くの利点は見られません. ストーリーボードを適切に使用する方法については、開発者ライブラリのこの例に従うことをお勧めします。これを完了すると、新しいスタイルの利点がわかり、コードで行うか、インターフェースビルダーを使用するかを決定できます: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/ SecondiOSAppTutorial/はじめに/Introduction.html#//apple_ref/doc/uid/TP40011318

于 2013-05-25T18:47:46.973 に答える