Frage

In meiner App habe ich wie folgt eine Schnittstelle zum Bohrer-Down-Typ:
Meine Root -Ansicht, die eine Liste von Elementen und eine "Hinzufügen" -Taste enthält.
Durch die Auswahl eines Elements wird die Ansicht "Detail" im NavigationController angezeigt.
Wenn Sie die Schaltfläche "Hinzufügen" hinzufügen, wird eine "Hinzufügen" -Ansicht angezeigt.

Wie würde ich zwischen der Ansicht hinzufügen zur Detailansicht wechseln?

Ich denke darüber nach, einen unanimierten "Pop" auf der Hinzufügen zu machen und den Detail -Controller einzuschieben, aber wie kann ich den zweiten Teil animiert, sodass die Detailansicht entweder vertikal einrutschen oder aus der Add -Ansicht einleiten würde?

Vielen Dank,
Kelso

War es hilfreich?

Lösung

Basierend auf Ramins Antwort können Sie es auf diese Weise versuchen, die von Apple in mehreren Beispielen verwendet wird:

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

Andere Tipps

Sie können die Ansicht auf die Detailansicht hinzufügen und eine Variable festlegen, um sich daran zu beachten. Wenn der Benutzer versucht, die Ansicht hinzufügen, überprüfen Sie die vorherige Variable und, wenn Sie festgelegt sind, direkt zum Root -Controller platzieren (dies sollte die Detail -Ansicht automatisch einstellen).

Marco

Machen Sie die Ansicht hinzufügen ein Modal und geben Sie dort eine "Fertig" (oder "Speichern") und eine "Abbrechen" -Taste an. Wenn der Benutzer abbrechen, schließen Sie einfach das Modal. Wenn sie erledigt haben, speichern Sie den neuen Datensatz im Tabellenmodell, und führen Sie vor der Rückkehr eine Tabelle neu auf der Stammansicht nach. Um nett zu sein, können Sie den neu hinzugefügten Artikel blinken.

Eine saubere Möglichkeit, dies einzurichten, besteht darin, den Modal Controller ein Delegierter zu implementieren, das eine "Fertig" -Protokollmethode erwartet und den Root Controller es implementiert und sich als Delegierter festlegt.

Auf diese Weise wird der Root Controller benachrichtigt, wenn der Benutzer "fertig" trifft, damit er alles zusammenfassen kann, was geschehen muss. Wenn Sie direkt von Add zum Detailansicht gehen möchten, kann die Delegate -Methode einen "Push" für den neu hinzugefügten Datensatz durchführen und Sie erhalten einen schönen Übergang vom Modal -Slide nach unten zum Detailansicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top