2009-08-21 12 views
5

Wyświetlam ABPeoplePickerNavigationController jako kartę w mojej aplikacji. Użytkownik klika nazwę, a następnie adres e-mail, a następnie robię coś z adresem e-mail.deselectRowAtIndexPath na ABPeoplePickerNavigationController

Potem chciałbym, aby osoba i nieruchomość, którą wybrały, zniknęły (nie zostaną podświetlone).

W normalnej tabeli, zadzwoniłbym do deselectRowAtIndexPath. Ale z ABPeoplePickerNavCont nie wydaje mi się, że mam dostęp do jego tabeli, ani nie wiem, co jest zaznaczone indexPath, ani nie ma api do odznaczenia wiersza.

W większości aplikacji ABPeoplePickerNavCont jest używany modalnie, więc nie ma znaczenia, że ​​wiersz jest nadal podświetlony, ponieważ cała sprawa zostanie odrzucona. Ale w mojej aplikacji nie jest zwalniany (tak jak karta kontaktów w aplikacji Telefon).

Wszelkie pomysły?

Odpowiedz

3

Odrzucić osobę bez animacji, a następnie przedstawić ją ponownie bez animacji. Wygląda dobrze.

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{ 

    [self dismissModalViewControllerAnimated:NO]; 

    [self presentModalViewController:peoplePicker animated:NO]; 
     return NO; 
} 
+0

Dzięki za sugestię. My peoplePicker nie jest pokazywany jako modalny - jest to zakładka na pasku kart ... więc nie można tego zwolnić w ten sposób. –

10

To właśnie robię ... i wygląda na to, że działa idealnie. Dodaję także znacznik wyboru po zaznaczeniu/cofnięciu wyboru elementu. Powiedz mi co myślisz. Dzięki :)

UIView *view = peoplePicker.topViewController.view; 
UITableView *tableView = nil; 
for(UIView *uv in view.subviews) 
{ 
    if([uv isKindOfClass:[UITableView class]]) 
    { 
     tableView = (UITableView*)uv; 
     break; 
    } 
} 

if(tableView != nil) 
{ 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:[tableView indexPathForSelectedRow]]; 

    cell.accessoryType = cell.accessoryType == UITableViewCellAccessoryNone ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone; 

    [cell setSelected:NO animated:YES]; 
} 
+0

Excillent ....... – Muzammil

4

Modyfikowanie odpowiedź Robby Valles', to jak mogę odznaczyć tableview z ABPeoplePickerNavigationController:

UIView *view = peoplePicker.topViewController.view; 
    UITableView *tableView = nil; 
    for(UIView *uv in view.subviews) 
    { 
    if([uv isKindOfClass:[UITableView class]]) 
    { 
     tableView = (UITableView*)uv; 
     break; 
    } 
    } 
if(tableView != nil) 
{ 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:[tableView indexPathForSelectedRow]]; 

    cell.accessoryType = cell.accessoryType == UITableViewCellAccessoryNone ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone; 

    [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:YES]; 
} 

nadzieję, że to pomaga.

+0

fajne rozwiązanie! –