2011-12-20 2 views
5

Ho un UITableView principale, quando la cella viene premuta, passa a un altro UITableView e quando una cella viene premuta, passa a DetailView di quella cella.UIViewController per sapere se è stato premuto o fatto scoppiare?

Voglio che il valore medio di UITableView si comporti in modo diverso a seconda che il detailView sia saltato o che lo stesso UITableView sia stato premuto. Se la vista è stata spostata dalla tabella principale, voglio scorrere verso l'alto, se viene visualizzata dopo che un DetailView è saltato, voglio che rimanga nella stessa posizione.

Qualche suggerimento?

risposta

2

è possibile chiamare un metodo scrollToTop sul DetailViewController dopo averlo inviato al controller di navigazione.

Qualcosa del genere:

if (!detailViewController) { 
    detailViewController = [[DetailViewController alloc] initWithNibName:nil bundle:nil]; 
} 
[self.navigationController pushViewController:detailViewController animated:YES]; 
[detailViewController scrollToTop]; 
// or use the tableView directly: 
// [detailViewController.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
+0

Grazie, non sapevo nemmeno che potevi scorrere prima che la vista fosse "visibile". – Nings

0

Creare un BOOL @property sulla vostra proprietà UIViewController mezzo chiamato wasPushed o qualcosa di simile, e quando si inizializza da UIViewController 1, impostare la proprietà sulla nuova istanza, spingerlo nello stack NAV e quindi è possibile utilizzare la vostra proprietà in metodi loadView, viewDidLoad, viewWill/DidAppear del controller della vista centrale.

Non appena lo hai usato, ripristinalo su FALSO o NO (o qualsiasi altra cosa) e quando finisci per tornare indietro a causa dell'apertura del tuo 3 ° controller di visualizzazione, avrai FALSO/NO nei tuoi metodi loadView, viewDidLoad ecc.

+0

Nothe che 'viewDidLoad'is non ottenere chiamato quando hai aperto il tuo terzo controller di vista – pmk

+0

ottieni 'viewDidLoad' se si preme un avvertimento di memoria o la vista viewController è stata gettata via mentre si era più a fondo nello stack. – Jessedc

+0

hm non lo sapevo, grazie per il suggerimento. Esiste una regola o una definizione su quando la vista di viewController viene gettata via? – pmk

1

Nella tua View Controller Medio, esaminare quali vista è next-to-display direttamente dalla pila UINavigationController:

- (void)viewWillDisappear:(BOOL)animated 
{ 
    if ([self.navigationController.topViewController isEqual:(UITableViewController *)tvcDetailView]) { 
     // Detail view has been pushed onto the UINavigationController stack 
    } 
    else { 
     // Middle view has been popped from the UINavigationController stack 
    } 
} 
+0

Non è stato perfetto per questo problema poiché non ha tenuto conto del primo avvio della vista (dovrebbe essere fatto scorrere anche in questo caso, ma in realtà ha funzionato benissimo con un altro problema che avevo, quindi grazie per questo! – Nings