Вопрос

В моем приложении у меня есть интерфейс типа детализации следующим образом:
Мой корневой просмотр, в котором есть список элементов и кнопка "Добавить".
Выбор элемента приводит к появлению "Подробного" представления в NavigationController.
Нажатие кнопки "Добавить" приводит к появлению представления "Добавить".

Как бы мне перейти между представлением Добавления к подробному представлению?

Я подумываю о том, чтобы сделать unimated "pop" в режиме добавления и включить контроллер детализации, но как мне сделать вторую часть анимированной, чтобы детальный вид либо скользил по вертикали, либо исчезал из режима добавления?

Спасибо,
Келсо

Это было полезно?

Решение

Основываясь на ответе Рамина, вы можете попробовать этот способ, который используется Apple в нескольких примерах:

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

Другие советы

Вы могли бы нажать Добавить представление в представление Сведений и установить переменную, чтобы запомнить это.Когда пользователь пытается открыть Добавить представление, вы проверяете предыдущую переменную и, если она установлена, переходите непосредственно к корневому контроллеру (который должен автоматически открыть представление сведений).

Марко

Сделайте режим добавления модальным и укажите в нем кнопки "Готово" (или "Сохранить") и "Отмена".Если пользователь нажимает кнопку отмена, вы просто закрываете модальный.Если они нажмут кнопку Готово, вы сохраните новую запись в табличной модели, затем выполните перезагрузку таблицы в корневом представлении перед возвратом.Чтобы быть приятным, вы можете прошить недавно добавленный элемент.

Простой способ настроить это - заставить модальный контроллер реализовать делегат, который ожидает метод протокола 'Done', и заставить корневой контроллер реализовать его и установить себя в качестве делегата.

Таким образом, корневой контроллер получает уведомление, когда пользователь нажимает "Готово", чтобы он мог инкапсулировать все, что должно произойти.Если вы хотите перейти непосредственно от добавления к подробному просмотру, метод делегирования может выполнить "нажатие" для вновь добавленной записи, и вы получите приятный переход от модального скольжения вниз к подробному просмотру.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top