Question

Dans mon application, j'ai une interface de type exploration en bas, comme suit:
Ma vue racine, qui contient une liste d'éléments et un " Ajouter " bouton.
En sélectionnant un élément, vous activez le bouton "Détail". vue sur le navigationController.
En sélectionnant le bouton "Ajouter" Un bouton appuie sur un bouton "Ajouter". vue.

Comment ferais-je la transition entre la vue Ajouter à la vue Détails?

Je pense faire un "pop" unanime. dans la vue Ajouter et appuyez sur le contrôleur de détails, mais comment puis-je animer la deuxième partie, de sorte que la vue de détail soit insérée verticalement ou fondue à partir de la vue Ajouter?

Merci,
Kelso

Était-ce utile?

La solution

Selon la réponse de Ramin, vous pouvez essayer cette méthode utilisée par Apple dans plusieurs exemples:

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];
            }
        }
    }
}

Autres conseils

Vous pouvez pousser la vue Ajouter sur la vue Détails et définir une variable pour s'en souvenir. Lorsque l'utilisateur essaie d'afficher la vue Ajouter, vous vérifiez la variable précédente et, le cas échéant, accédez directement au contrôleur racine (la vue Détails doit apparaître automatiquement).

Marco

Faites de la vue d'ajout un modal et indiquez-y un "Terminé". (ou "Enregistrer") et un "Annuler". bouton. Si l'utilisateur appuie sur annuler, vous fermez simplement le modal. Si vous cliquez sur Terminé, vous enregistrez le nouvel enregistrement dans le modèle de table, puis rechargez la table dans la vue racine avant de la retourner. Pour être sympa, vous pouvez flasher le nouvel élément ajouté.

Une méthode simple pour configurer cela consiste à faire en sorte que le contrôleur modal implémente un délégué qui attend une méthode de protocole 'Terminé' et que le contrôleur racine l'implémente et se définisse lui-même en tant que délégué.

De cette façon, le contrôleur racine est averti lorsque l'utilisateur clique sur "Terminé" pour qu'il puisse encapsuler tout ce qui doit se passer. Si vous souhaitez passer directement de la vue ajouter à la vue détaillée, la méthode déléguée peut effectuer un "push" pour l'enregistrement nouvellement ajouté et vous obtiendrez une belle transition du mode modal vers la vue détaillée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top