2009-03-06 26 views
0

在我的應用程序中,我有一個向下鑽取的界面,如下所示:
我的根視圖,其中有一個項目列表和一個「添加」按鈕。
選擇一個項目將推動navigationController上的「Detail」視圖。
選擇「添加」按鈕推動「添加」視圖。在navigationController中的子視圖之間轉換?

我如何在添加視圖到細節視圖之間轉換?

我正在考慮在添加視圖上做一個沒有動畫的「彈出」,並且啓動了細節控制器,但是如何使第二部分變成動畫,所以細節視圖會垂直滑動或從添加視圖?

感謝,
凱爾索

回答

0

基於拉明的答覆,你可以試試這個方法,這幾個樣品中使用的蘋果:

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

您可能推動加查看到詳細信息視圖,並設置一個變量來記住這一點。 當用戶嘗試彈出添加視圖時,檢查前一個變量,如果設置,則直接彈出到根控制器(應該自動彈出詳細信息視圖)。

馬爾科

0

依靠附加查看模式,並在那裏提供了一個「完成」(或「保存」)和「取消」按鈕。如果用戶點擊取消,則只需關閉模式。如果它們完成,則將新記錄保存到表模型中,然後在返回之前在根視圖上重新加載表。爲了不錯,你可以刷新新添加的項目。

一個乾淨的方式來設置它是爲了讓模態控制器實現一個委託,期望一個'完成'的協議方法,並讓根控制器實現它並將自己設置爲委託。

這樣,當用戶點擊「完成」時,通知根控制器,因此它可以封裝所有需要發生的事情。如果您想直接從添加到詳細視圖,則委託方法可以爲新添加的記錄執行「推送」操作,並且您將從模式滑動到細節視圖進行很好的轉換。