ABPersonViewController не будет отображаться в Push - PullRequest
0 голосов
/ 15 ноября 2011

Итак, вот сценарий, у меня есть 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.

enter image description here

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

Ответы [ 2 ]

0 голосов
/ 17 ноября 2011

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

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

в классе 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];

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

0 голосов
/ 15 ноября 2011

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

Убедитесь, что self.navigationController не ноль.

...