2009-08-21 8 views
5

Sto visualizzando un ABPeoplePickerNavigationController come una scheda nella mia app. L'utente fa clic su un nome, quindi sull'indirizzo email, quindi faccio qualcosa con l'indirizzo email.deselectRowAtIndexPath su un ABPeoplePickerNavigationController

Successivamente, mi piacerebbe che la persona e la proprietà che hanno selezionato si dissolvessero (non essere evidenziate).

In una tabella normale, chiamerei DeselectRowAtIndexPath. Ma con ABPeoplePickerNavCont non sembra che abbia accesso alla sua tabella, né so quale indexPath è selezionato, né esiste un'ap per deselezionare la riga.

Sulla maggior parte delle applicazioni, ABPeoplePickerNavCont viene utilizzato modale in modo che non importa che la fila è ancora evidenziato perche' il tutto viene respinto. Ma nella mia app non viene rimosso (proprio come la scheda Contatti nell'app Telefono).

Qualche idea?

risposta

3

respingere il personpicker senza animazione, quindi presentarlo di nuovo senza animazione. Sembra buona.

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

    [self dismissModalViewControllerAnimated:NO]; 

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

Grazie per il suggerimento. My peoplePicker non viene mostrato come modale: è una scheda su una barra delle schede ... quindi non è possibile eliminarlo in questo modo. –

10

Questo è quello che sto facendo ... e sembra funzionare perfettamente. Aggiungo anche un accessorio segno di spunta quando selezioni/deselezioni un oggetto. Fatemi sapere cosa ne pensate. Grazie :)

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

Modifica risposta Valles Robby, è così che deselezionare la Tableview di 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]; 
} 

Spero che questo aiuti.

+0

bella soluzione! –