使用 Segues(向前傳遞資料)

要使用 segue 將資料從當前檢視控制器傳遞到下一個新檢視控制器(而不是先前的檢視控制器),首先在相關故事板中建立一個帶有識別符號的 segue。覆蓋當前檢視控制器的 prepareForSegue 方法。在方法內部檢查你剛剛通過其識別符號建立的 segue。通過在向下轉換檢視控制器上設定屬性,轉換目標檢視控制器並將資料傳遞給它。

設定 segue 的識別符號:

StackOverflow 文件

可以通過 ctrl +拖動到目標檢視控制器以程式設計方式或使用故事板中設定的按鈕操作事件來執行分段。你可以在需要時使用檢視控制器中的 segue 識別符號以程式設計方式呼叫 segue:

Objective-C

- (void)showDetail {
    [self performSegueWithIdentifier:@"showDetailingSegue" sender:self];        
}

迅速

func showDetail() {
    self.performSegue(withIdentifier: "showDetailingSegue", sender: self)
}

你可以在覆蓋的 prepareForSegue 方法中配置 segue 有效負載。你可以在載入目標檢視控制器之前設定所需的屬性。

Objective-C

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([segue.identifier isEqualToString:@"showDetailingSegue"]){
        DetailViewController *controller = (DetailViewController *)segue.destinationViewController;
        controller.isDetailingEnabled = YES;
    }
}

迅速

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetailingSegue" {
        let controller = segue.destinationViewController as! DetailViewController
        controller.isDetailingEnabled = true
    }    
}

DetailViewController 是第二個檢視控制器的名稱,isDetailingEnabled 是該檢視控制器中的公共變數。

要擴充套件此模式,可以將 DetailViewController 上的公共方法視為偽初始化程式,以幫助初始化任何所需的變數。這將自動記錄需要在 DetailViewController 上設定的變數,而無需通讀它的原始碼。這也是放置預設值的便利之處。

Objective-C

- (void)initVC:(BOOL *)isDetailingEnabled {
    self.isDetailingEnabled = isDetailingEnabled
}

迅速

func initVC(isDetailingEnabled: Bool) {
    self.isDetailingEnabled = isDetailingEnabled
}