Theo tôi biết điều này là không thể vì khung cốt truyện chỉ đơn giản là gọi alloc
và init
trên lớp bạn xác định trong Interfacebuilder. Ngoài ra, thuộc tính destinationViewController
của segue là chỉ đọc, do đó bạn không thể đơn giản thay thế ViewController hiện tại.
Cách duy nhất để sử dụng Viết kịch bản có lẽ sẽ là để tạo ra một wrapper lớp mà nội instantiates SFListViewController
với các thuộc tính mong muốn và sau đó có chức năng như một đối tượng proxy và do đó truyền viewDid***
và viewWill***
-methods đến lớp bọc và cũng trở về quan điểm của VC bọc trong một tài sản chỉ đọc view
... Bạn có được ý tưởng.
Nói chung có một số cách khác nhau để khởi tạo một UIViewController
trong trường hợp này:
Có một tùy chọn để xác định "Người dùng xác định thời gian chạy Thuộc tính" mà có thể được sử dụng để khởi động.
Ghi đè phương thức prepareForSegue:
, như bạn đã thử, trong ViewController gốc của bạn và thực hiện "post-alloc-init-initialisation" tại đó.
Nếu tồi tệ nhất đến tồi tệ nhất, bạn có thể quay lại số IBAction
để có thể tự khởi chạy ViewController.
Tôi hy vọng điều này sẽ hữu ích.
Chỉnh sửa: Tôi có thể xác minh rằng Proxy-Approach hoạt động kể từ khi tôi gặp một vấn đề tương tự với ABPeoplePickerNavigationController
nơi cách tiếp cận này hoạt động tốt. Vì chúng tôi đã thiết lập điều trong bảng câu chuyện của chúng tôi xin lưu ý rằng bạn phải sử dụng awakeFromNib
để thực hiện cấu hình ban đầu (thay vì một số phương thức init
).
Đây là mã cho lớp wrapper của tôi:
#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 Đó là một câu hỏi hay, tôi đã có một vấn đề tương tự khi để cho Interface Builder nhanh chóng đối tượng. – Besi