2009-03-06 2 views
0

В моем приложении у меня есть интерфейс типа детализации следующим образом:
Мой корневой вид, в котором есть список элементов и кнопка «Добавить».
Выбор элемента подталкивает «Подробный» вид на navigationController.
Выбор кнопки «Добавить» позволяет выбрать «Добавить».Переход между subviews в navigationController?

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

Я подумываю о том, чтобы создать единую «поп» в окне «Добавить» и нажать «Детальный контроллер», но как сделать вторую часть анимированной, поэтому детальный вид будет либо скользить по вертикали, либо исчезать из Добавить просмотр?

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

ответ

0

На основании ответа Рамин, вы можете попробовать этот способ, который используется 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]; 
      } 
     } 
    } 
} 
0

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

Marco

0

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

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

Таким образом, корневой контроллер уведомляется, когда пользователь нажимает «Готово», чтобы он мог инкапсулировать все, что должно произойти. Если вы хотите перейти непосредственно из окна «add to detail», метод делегата может сделать «push» для вновь добавленной записи, и вы получите хороший переход от модального сползания к подробному представлению.

Смежные вопросы