ABPersonViewController не будет отображаться в Push

Итак, вот сценарий, у меня есть SearchController, который отображает отфильтрованные результаты из списка контактов моего приложения, а также присутствует в моей адресной книге.

Код, который выдвигает ABPersonViewController, присутствует в моем методе didSelectObject: atIndex. вот код:

TableCellClass *selectedCell= (TableCellClass *)[self.tableView cellForRowAtIndexPath:indexPath];

ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef arrayOfAllPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
ABRecordRef thisPerson = CFArrayGetValueAtIndex(arrayOfAllPeople,selectedCell.contactIndex);
ABPersonViewController *picker = [[ABPersonViewController alloc]init];
picker.personViewDelegate = self;
picker.displayedPerson = thisPerson;
picker.allowsEditing = YES;
[self.navigationController pushViewController:picker animated:YES];

Этот блок кода отлично работает на стандартном TTTableViewController, но почему-то не работает на моем searchController.

Вот снимок экрана, кстати. Так что, как видите, NavigationController отсутствует. Это по умолчанию на Three20. Ячейка со значком адресной книги - это элемент, который запускает ABPersonViewController при касании

2 ответа

Решение

Поэтому я нашел обходной путь к своей проблеме.

Сначала я создал класс, который является подклассом ABPersonViewController. Затем создал свой собственный -initWithNavigatorURL:query: метод.

в классе TTTableViewController, который является моим SearchDisplayController, внутри -didSelectObject:atIndexPath: метод, у меня есть этот блок кода:

TTTableItemCell *selectedCell= (TTTableItemCell *)[self.tableView cellForRowAtIndexPath:indexPath];

ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef arrayOfAllPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);

ABRecordRef thisPerson = CFArrayGetValueAtIndex(arrayOfAllPeople,selectedCell.contactIndex);
ABPersonViewController *picker = [[ABPersonViewController alloc]initWithNibName:nil bundle:[NSBundle mainBundle]];
picker.personViewDelegate = self;
picker.displayedPerson = thisPerson;
picker.allowsEditing = YES;

NSNumber *allowsEditing;

if (picker.allowsEditing) {
    allowsEditing = [[NSNumber alloc]initWithInt:1];
}
else{
    allowsEditing = [[NSNumber alloc]initWithInt:0];
}

TTURLAction *urlAction = [[[TTURLAction alloc] initWithURLPath:@"tt://GJABPersonView"] autorelease];
urlAction.query = [NSDictionary dictionaryWithObjects:[NSMutableArray arrayWithObjects:self, thisPerson,allowsEditing, nil] forKeys:[NSMutableArray arrayWithObjects:@"personViewDelegate",@"displayedPerson",@"allowsEditing", nil]];
urlAction.animated = YES;
[[TTNavigator navigator] openURLAction:[urlAction applyTransition:UIViewAnimationTransitionFlipFromLeft]];
[allowsEditing release];

Он не анимируется, как обычно при навигации, но работает:)

Как представлен ваш searchController? Есть ли у него навигационный контроллер?

Проверь это self.navigationController не ноль.

Другие вопросы по тегам