2016-05-04 88 views
0

我攜帶一個包含對象集合的uitableview。 當我點擊一個UITableViewCell打開另一個UIView。 但我想發送UITableViewCell中的這個新UIView對象並在那裏顯示它們的詳細信息。 我跟着回答這個問題加載另一種觀點認爲:ViewController Segue Xamarin 我很感激,如果有人幫助如何使用segue傳遞對象

enter image description here

+0

嘗試的https:/ /developer.xamarin.com/api/member/UIKit.UIViewController.PrepareForSegue/ – brandonscript

回答

1

覆蓋PrepareForSegue在你的ViewController設置目標控制器上的參數。您需要定義目標控制器上的公共方法或屬性,使您可以傳遞參數:

public override void PrepareForSegue (UIStoryboardSegue segue, NSObject sender) 
    { 
     if (segue.Identifier == "TaskSegue") { // set in Storyboard 
     var navctlr = segue.DestinationViewController as TaskDetailViewController; 
     if (navctlr != null) { 

      // some public method you create in your destination controller 
      navctlr.SetTask (this, item); 
     } 
     } 
    } 
1

有幾個解決方案,第一種是使用 prepareForSegue(_:發件人:)方法:

討論 此方法的默認實現什麼也不做; 可以覆蓋它,以基於segue的上下文將相關數據傳遞給新視圖控制器或窗口控制器。賽格對象 描述了轉換並且包括對涉及賽格的兩個控制器 的引用。

可以從多個來源觸發分段,因此請使用segue和發件人參數中的信息 來消除應用程序中不同的 邏輯路徑之間的歧義。例如,如果segue源自 表格視圖,則sender參數將標識用戶點擊的單元格。您可以使用該信息在 目標視圖控制器上設置數據。

在你需要 「拯救」 要在didSelectRow傳遞對象THI情況:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    self.currentObjectToPass = .. some object from array or somewhere else.. 
} 

然後將其設置爲下一個VC:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton*)sender { 
    if ([segue.identifier isEqualToString:@"bookingDetailsSegue"]) { 
     self.nextVC = segue.destinationViewController; 
     self.nextVC.objectToPass = self.currentObjectToPass; 
    } 
} 

另一種方法是拒絕使用segues並通過storyboardID獲取vc。

這樣你需要 instantiateViewController(withIdentifier :)方法:

返回值對應於指定的 標識符字符串視圖控制器。如果沒有視圖控制器與 字符串關聯,則此方法會引發異常。

討論您可以使用此方法來創建你想要操作和編程目前在 應用程序 視圖控制器對象。在使用此方法檢索控制器之前,必須使用Interface Builder中的適當標識符 字符串明確標記它。

每次調用指定視圖控制器 時,此方法都會創建一個新實例。

然後你的代碼看起來就像這樣:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
     self.nextVC = [self.storyboard instantiateViewControllerWithIdentifier:@"nextVCID"]; 

     self.nextVC.objectToPass = = .. some object from array or somewhere else.. 
    [self.navigationController pushViewController:self.nextVC animated:YES]; 
    } 

而且不要忘記在IB設置VC的標識(ID故事板)在這裏:

enter image description here