私の知る限り、ストーリーボードフレームワークは、Interfacebuilderで定義したクラスをalloc
呼び出すだけなので、これは不可能です。init
さらに、segueのdestinationViewController
属性は読み取り専用であるため、既存のViewControllerを単純に置き換えることもできません。
SFListViewController
Storyboardingを使用する唯一の方法は、必要な属性でを内部的にインスタンス化し、プロキシオブジェクトとして機能するラッパークラスを作成することです。これにより、ラップされたクラスにメソッドviewDid***
とメソッドが伝播viewWill***
され、ラップされたVCのビューが読み取り専用で返されます。view
プロパティ...あなたはアイデアを得る。
UIViewController
一般に、このような場合にを初期化するための代替方法がいくつかあります。
初期化に使用できる「ユーザー定義のランタイム属性」を指定するオプションがあります。
prepareForSegue:
試したように、ルートViewControllerでメソッドをオーバーライドし、そこで「post-alloc-init-initialisation」を実行します。
最悪の事態が発生した場合はIBAction
、ViewControllerを自分で初期化できるようにするためににフォールバックできます。
これがお役に立てば幸いです。
編集:ABPeoplePickerNavigationController
このアプローチがうまく機能した場所で同様の問題に遭遇したので、プロキシアプローチが機能することを確認できます。awakeFromNib
ストーリーボードに設定したので、初期構成を行うには(何らかのinit
方法ではなく)を使用する必要があることに注意してください。
これは私のラッパークラスのコードです:
#import "PeoplePickerViewControllerWrapper.h"
@implementation PeoplePickerViewControllerWrapper
@synthesize ppvc = _ppvc; // This is the object I'm proxying (The proxyee so to speak)
@synthesize delegate = _delegate;
- (void)awakeFromNib
{
self.ppvc = [[ABPeoplePickerNavigationController alloc] init ];
self.ppvc.peoplePickerDelegate = self;
self.ppvc.addressBook = ABAddressBookCreate();
self.ppvc.displayedProperties = [NSArray arrayWithObject:[NSNumber numberWithInt:kABPersonPhoneProperty]];
}
#pragma mark - View lifecycle
- (void)loadView
{
[super loadView];
[self.ppvc loadView];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self.ppvc viewDidLoad];
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.ppvc viewWillAppear:animated];
}
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
[self.ppvc viewDidDisappear:animated];
}
-(UIView *)view{
return self.ppvc.view;
}
- (void)viewDidUnload
{
[super viewDidUnload];
[self.ppvc viewDidUnload];
}