私が知る限り、ストーリーボードフレームワークは単にInterfacebuilderで定義したクラスのalloc
とinit
を呼び出しているので、これは不可能です。さらに、セグのdestinationViewController
属性は読み取り専用であるため、既存のViewControllerを置き換えることもできません。
ストーリーボードを使用する唯一の方法は、おそらく、内部プロキシオブジェクトとして機能し、したがって、ラップクラスにviewDid***
とviewWill***
-methodsを伝播し、また帰国後、必要な属性でSFListViewController
をインスタンス化し、ラッパークラスを作成することですラップされたVCのビューは読み取り専用でview
プロパティになります...あなたはそのアイデアを得ます。
は、一般的に、このような場合にはUIViewController
を初期化する別の方法がいくつかあります:
初期化のために使用することができ、「ユーザー定義のランタイム属性」を指定するオプションがあります。
あなたが試したように、ルートViewControllerでprepareForSegue:
メソッドをオーバーライドし、そこに「post-alloc-init-initialisation」を実行します。
最悪の場合は、IBAction
に戻ってViewControllerを自分で初期化することができます。
これが役立ちます。
編集:私はちょうどこのアプローチはうまく働いていたABPeoplePickerNavigationController
と同様の問題に出くわしたので、プロキシのアプローチが機能するかどうかを確認することができます。私たちがストーリーボードに設定したので、(init
メソッドの代わりに)初期設定を行うためにawakeFromNib
を使用しなければならないことに注意してください。これは私のラッパークラスのコードです
:
#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];
}
1良い質問ですInterface Builderのオブジェクトをインスタンス化させるとき、私は同様の問題を持っていました。 – Besi