我有一個在故事板中定義的ABNewPersonViewController
的子類,並按照文檔的要求將其嵌入在導航控制器中。導航控制器本身由標籤欄控制器控制。在身份檢查員中,該類已被設置爲子類。
在子類ABNewPersonViewController
我做了測試初始化中viewDidLoad
:iOS地址簿:無法在故事板中設置ABNewPersonViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.newPersonViewDelegate = self;
ABRecordRef newPerson= ABPersonCreate();
CFErrorRef error = NULL;
ABRecordSetValue(newPerson, kABPersonFirstNameProperty, CFSTR("First"), &error);
ABRecordSetValue(newPerson, kABPersonLastNameProperty, CFSTR("Last"), &error);
assert(!error);
[self setDisplayedPerson:newPerson];
}
在我的子類,我也實施委託方法newPersonViewController:didCompleteWithNewPerson:
,但是這並不重要。
當我在選項卡欄控制器中選擇選項卡時,會顯示一個黑色屏幕。
任何想法我做錯了什麼?
PS:我知道如何以編程方式設置它,但我想在故事板中完成它。
編輯
當我做到這一點編程,子類是由alloc
& init
初始化。這工作正常。當子類從storyboard實例化時,它會收到initWithCoder:
。爲了測試它,我在下面的方式來實現initWithCoder:
:
- (id)initWithCoder:(NSCoder*)coder{
self = [super init];
return self;
}
在這種情況下,確實顯示的ABNewPersonViewController
進入面具,但導航欄
未顯示
空。我知道這個初始化hack是錯誤的,但是有沒有人知道如何做到這一點?
編輯
導航欄沒有顯示,因爲我將它設置爲隱藏。通常會顯示,但「完成」和「取消」按鈕丟失。這當然並不奇怪,因爲超類不是由initWithCoder:
初始化的,而是由init
初始化的。
問題仍然在於爲什麼沒有顯示輸入掩碼,而只顯示黑屏。
謝謝您的回答!我查了一下:從標籤欄視圖控制器中,我已經觸發了通過選擇一個標籤觸發的3個導航控制器。因此,標籤欄控制器IS確實與控制ABNewPersonViewController的導航控制器鏈接。 –
您將顯示您的選項卡,然後導航到後續的視圖控制器,因此不需要將TabBarController直接連接到導航控制器,在通過TabBarController呈現視圖控制器後,您可以進一步導航。 – Say2Manuj
我試過了:我刪除了導航控制器,並將ABNewPersonViewController子類直接添加到標籤欄控制器,並且它有一個觸發的繼續。但屏幕仍然是黑色的... –