我希望我沒有問過已經回答的問題(但我沒有找到答案,所以希望我不會)。performSegueWithIdentifier and sharedData
我在當前的xcode版本中使用了segues和navigationController。我需要將數據從一個視圖傳遞到另一個視圖 - 最簡單的方法是什麼?我遇到了一些sharedData的東西,可能會掛在performSegueWithIdentifier方法上,但不知道如何使用它(或者它是否是這樣做的正確選擇)。
由於
我希望我沒有問過已經回答的問題(但我沒有找到答案,所以希望我不會)。performSegueWithIdentifier and sharedData
我在當前的xcode版本中使用了segues和navigationController。我需要將數據從一個視圖傳遞到另一個視圖 - 最簡單的方法是什麼?我遇到了一些sharedData的東西,可能會掛在performSegueWithIdentifier方法上,但不知道如何使用它(或者它是否是這樣做的正確選擇)。
由於
甲賽格瑞具有兩個視圖控制器:sourceViewController
和destinationViewController
。當UIKit執行一個segue時,它發送一個prepareForSegue:sender:
消息給源VC。您可以在視圖控制器子類中重寫該方法以將數據傳遞到目標VC。
例如,假設您有一個帶有電影表格視圖的主視圖控制器,並且當用戶在表格視圖中單擊一行時,您想要繼續播放電影的詳細視圖控制器。
@implementation MasterViewController
...
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
DetailViewController *detailVC = segue.destinationViewController;
NSIndexPath *selectedPath = [self.tableView indexPathForSelectedRow];
detailVC.movie = [self movieForIndexPath:selectedPath];
}
這在Introducing Interface Builder Storyboarding視頻從WWDC 2011
另外值得一提的解釋說,當SEGUE的起源是一個表格視圖單元格或表視圖單元格的附件按鈕時,sender
說法prepareForSegue:sender:
是表格視圖單元格。
我認爲最好的辦法是導入視圖控制器的頭部,該視圖控制器將顯示在執行segue的控制器中。然後用它的存取或其他方法來傳遞內部prepareForSegue所需的數據:
// In FirstViewController.h
#import "SecondViewController.h"
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"SegueToSecondViewController"]) {
// Get destination view controller and don't forget
// to cast it to the right class
SecondViewController *secondController = [segue destinationViewController];
// Pass data
secondController.dataArray = self.someDataArray;
secondController.name = @"Fancy name";
}
}
當你想要的數據從第二到第一回,我建議使用委託:
// In FirstViewController.h
#import "SecondViewController.h"
#import "SecondViewControllerDelegate.h"
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"SegueToSecondViewController"]) {
SecondViewController *secondController = [segue destinationViewController];
// Declare first view controller as a delegate
secondController.delegate = self;
// Pass data
secondController.dataArray = self.someDataArray;
secondController.name = @"Fancy name";
}
}
// Second controller's delegate method,controller
// ie. used to return data after second view is dismissed
- (void)secondControllerFinishedSomeTask:(NSArray *)someReturnedData {
// Do something with returned data
}
方式很酷,謝謝你們! – Ondrej
當你想回數據從第二個到第一個,更好的方法是到use Unwind Segues。
如果您想使用真實姓名,請修改您的用戶名,不要在帖子中多加一行。 :) – mac