2011-11-15 2 views
0

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

Код, который выталкивает 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

Вот снимок экрана, кстати. Таким образом, вы можете видеть, что навигация отсутствует. По умолчанию это значение равно 320. Ячейка с иконкой адресной книги - это элемент, который запускает ABPersonViewController при нажатии на стрелку

ответ

0

Так что я нашел обходной путь к моей проблеме.

Во-первых, я создал класс, являющийся подклассом 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]; 

Это не анимировать, как это обычно делает при навигации, но это делает работа :)

0

Как вы проводите поискКонтроллер? Имеет ли контроллер навигации?

Проверьте, что self.navigationController не является нулевым.

+0

Yup держит нулевое значение. Так как я могу это исправить? Будет ли создание нового навигационного контроллера нарушить навигационное отображение Three20? –

+0

Не уверен насчет трех20, но вам нужно получить действительный указатель на navigationController. Как это представлено? – railwayparade

+0

Я отредактировал свое сообщение для просмотра скриншота :) –

Смежные вопросы