据我所知,这是不可能的,因为情节提要框架只是调用您在 Interfacebuilder 中定义的类alloc
。init
此外,segue 的destinationViewController
属性是只读的,因此您也不能简单地替换现有的 ViewController。
使用 Storyboard的唯一方法可能是创建一个包装类,它在内部实例化SFListViewController
具有所需属性的财产...你明白了。viewDid***
viewWill***
view
UIViewController
在这种情况下,通常有许多替代方法来初始化 a :
有一个选项可以指定可用于初始化的“用户定义的运行时属性”。
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];
}