2013-07-04 22 views
0

首先解僱,看看這張截圖我的故事板:返回的ViewController比ParentViewController其他的ModalViewController

storyboard layout

它是一個完善的地圖應用程序。用戶可以錄製新的字段記錄,也可以從庫中選擇現有記錄並上載。用戶必須添加標題/描述等(或者在來自庫時修改它們)的ViewController以模態方式呈現(在右上方)。

如果用戶選擇取消並刪除錄音,他應該返回到錄音屏幕,如果他來自那裏,其他人會去圖書館。如果他選擇保存/上傳記錄,他應該返回圖書館,在那裏顯示上傳進度。

我該如何回到所需的ViewController,而不依賴於我來自的ParentViewController?

我想過unwindSegue,但這對我的佈局不起作用。然後我想出了一個骯髒的解決方法,我更改了TabBarController的選定選項卡。但是,我也想正確設置代理來傳遞一些數據。

歡迎任何想法!

回答

1

我不認爲改變選項卡欄控制器的selectedIndex是一個「骯髒的解決方法」 - 這是如何做到這一點,給你的設置。看來您希望EntryViewController(庫)成爲EntryDetailViewController的代表。如果是這樣的話,你可以設置委託在EntryDetailViewcontroller的viewDidLoad方法是這樣的:

#import "DetailViewController.h" 
#import "TableController.h" 

@interface DetailViewController() 
@property (strong,nonatomic) UITabBarController *tbc; 
@end 

@implementation DetailViewController 


- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.tbc = (UITabBarController *)self.presentingViewController; 
    self.delegate = (TableController *)[(UINavigationController *)self.tbc.viewControllers[1] topViewController]; 
} 


- (IBAction)saveAndUpload:(UIButton *)sender { 
    [self.tbc setSelectedIndex:1]; 
    [self.delegate saveRecording:@"test recording"]; 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 


- (IBAction)delete:(UIButton *)sender { 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

在我的例子,我只是有兩個按鈕保存或取消,我的TableController將是相同的您的庫控制器。

+0

謝謝,現在工作正常!選項卡欄的選擇似乎是......硬編碼給我的。現在一切都更加清晰,多虧了你! EntryViewController現在是EntryDetailViewController的代表,正如您所建議的那樣,我可以從任何一種來自於我的方式(包括unwind segue)中解散它。 –