У меня есть подкласс ABNewPersonViewController
, определенный в раскадровке, и встроенный там в контроллер навигации, как требуется документами. Контроллер навигации сам управляется контроллером панели вкладок. В инспекторе идентификации класс был установлен в подкласс.
В подклассах ABNewPersonViewController
я инициализация теста в viewDidLoad
:iOS Addressbook: Невозможно настроить 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: Я знаю, как настроить его программно, но я хотел бы сделать это в раскадровке.
EDIT
Когда я сделать это программно, подкласс инициализируется alloc
& init
. Это работает правильно. Когда подкласс создается из раскадровки, он получает initWithCoder:
. Чтобы проверить это, я осуществил initWithCoder:
следующим образом:
- (id)initWithCoder:(NSCoder*)coder{
self = [super init];
return self;
}
В этом случае, действительно отображается запись маска ABNewPersonViewController
, но навигационный бар
не показан
пустым. Я знаю, что этот взлом инициализации ошибочен, но кто-нибудь знает, как это сделать правильно?
EDIT
Панель навигации не был показан, потому что я поставил его скрытым. Обычно это отображается, но кнопки «done» и «cancel» отсутствуют. Это, конечно, не удивительно, потому что суперкласс не инициализирован initWithCoder:
, а init
.
По-прежнему возникает вопрос, почему маска ввода не отображается, а только черный экран.
Спасибо за ваш ответ! Я просмотрел его: из контроллеров представления панели табуляции я инициировал segues для 3 навигационных контроллеров, которые запускаются путем выбора вкладки. Таким образом, контроллер панели вкладок действительно связан с контроллером nav, который управляет ABNewPersonViewController. –
Вы представляете свои вкладки, а затем переходите к последующим контроллерам представлений, поэтому нет необходимости подключать TabBarController непосредственно к контроллеру навигации, после того, как контроллер представления представлен через TabBarController, вы перемещаетесь дальше. – Say2Manuj
Я попробовал: я удалил навигационный контроллер и добавил подкласс ABNewPersonViewController непосредственно к контроллеру панели вкладок, и у него есть сгенерированный переход к нему. Но экран по-прежнему черный ... –