Domanda

Nella mia app ho un'interfaccia di tipo drill-down come segue:
La mia vista radice, che ha un elenco di elementi e un " Aggiungi " Pulsante.
La selezione di un articolo comporta il "Dettaglio" visualizza sul controller di navigazione.
Selezione di " Aggiungi " il pulsante preme un " Aggiungi " view.

Come potrei passare dalla vista Aggiungi alla vista Dettaglio?

Sto pensando di fare un & pop; pop " non animato nella vista Aggiungi e spingere il controller Dettagli su, ma come posso animare la seconda parte, quindi la vista dettagli potrebbe scorrere verticalmente o sbiadire dalla vista Aggiungi?

Grazie,
Kelso

È stato utile?

Soluzione

Sulla base della risposta di Ramin, puoi provare in questo modo, che viene utilizzato da Apple in diversi esempi:

MyListViewController.h

#import "MyAddViewController.h"

@interface MyListViewController : UITableViewController <MyAddViewControllerDelegate> {
}

- (IBAction)add:(id)sender;
@end

MyListViewController.m

// Action for bring up add view controller
- (IBAction)add:(id)sender {
    MyAddViewController *addViewController = [[MyAddViewController alloc] initWithStyle:UITableViewStyleGrouped];
    addViewController.delegate = self;

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addViewController];
    [self presentModalViewController:navigationController animated:YES];

    [navigationController release];
    [addViewController release];     
}

// MyAddViewController's delegate method, dismiss the add view controller in here
- (void)addViewController:(MyAddViewController *)addViewController didAddData:(MyData *)data{
if (data) {
   MyDetailViewController *detailViewController = [[MyDetailViewController alloc] initWithStyle:UITableViewStylePlain];
   detailViewController.data = data;
   [self.navigationController pushViewController:detailViewController animated:YES];
   [detailViewController release]; 
}
[self dismissModalViewControllerAnimated:YES];
}

MyAddViewController.h

@protocol MyAddViewControllerDelegate;
@class MyData;

@interface MCCourseAddTableViewController : UITableViewController {
@private
    MyData *data;
    id <MCCourseAddDelegate> delegate;
}

// MyData could be NSManagedObject if you want to use Core Data
@property(nonatomic, retain) MyData *data;
@property(nonatomic, assign) id <MyAddViewControllerDelegate> delegate;

- (void)save;
- (void)cancel;
@end

@protocol MyAddViewControllerDelegate <NSObject>
@optional
- (void)addViewController:(MyAddViewController *)addViewController didAddData:(MyData *)data;;
@end

MyAddViewController.m

- (void)save {
    if (self.delegate != nil) {
        if ([self.delegate conformsToProtocol:@protocol(MyAddViewControllerDelegate)]){
            if ([self.delegate respondsToSelector:@selector(addViewController:didAddData:)]){
                // Send data back to List View, to bring up detail view controller and dismiss add view controller
                [self.delegate addViewController:self didAddData:self.data];
            }
        }
    }
}

- (void)cancel {
    if (self.delegate != nil) {
        if ([self.delegate conformsToProtocol:@protocol(MyAddViewControllerDelegate)]){
            if ([self.delegate respondsToSelector:@selector(addViewController:didAddData:)]){
                // Send nil back to ListView, to dismiss the add view controller only
                [self.delegate addViewController:self didAddData:nil];
            }
        }
    }
}

Altri suggerimenti

È possibile inserire la vista Aggiungi nella vista Dettagli e impostare una variabile per ricordarlo. Quando l'utente tenta di visualizzare la vista Aggiungi, si controlla la variabile precedente e, se impostato, si apre direttamente sul controller di root (che dovrebbe far apparire automaticamente la vista Dettagli).

Marco

Trasforma la visualizzazione add in modale e fornisci " Fatto " (o " Salva ") e un " Annulla " pulsante. Se l'utente preme Annulla, chiudi semplicemente il modale. Se si preme Fatto, si salva il nuovo record nel modello di tabella, quindi si ricarica una tabella nella vista principale prima di tornare. Per essere simpatici, puoi inviare in flash l'elemento appena aggiunto.

Un modo chiaro per impostare questo è quello di rendere il controller modale implementare un delegato che si aspetta un metodo di protocollo 'Fatto' e che il controller root lo implementi e si imposti come delegato.

In questo modo, il controller di root viene avvisato quando l'utente preme 'Fatto' in modo da poter incapsulare tutto ciò che deve accadere. Se vuoi passare direttamente dalla vista aggiungi alla vista dettagli, il metodo delegato può fare una 'spinta' per il record appena aggiunto e otterrai una piacevole transizione dallo scorrimento modale alla vista dettagli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top