2016-05-04 26 views
0

私はオブジェクトのコレクションでuitableviewを運びます。 そして、私はUITableViewCellをクリックすると別のUIViewを開きます。 しかし、私は、この新しいUIViewのためのUITableViewCellにあるオブジェクトを送信し、その詳細を表示したいと思っていました。 は、私は別のビューをロードするには、この質問に答えるために続く:ViewController Segue Xamarin 私は誰かが先コントローラのパラメータを設定するためにあなたのViewControllerでsegueを使ってオブジェクトを渡す方法

enter image description here

+0

してみます。https:/ /developer.xamarin.com/api/member/UIKit.UIViewController.PrepareForSegue/ – brandonscript

答えて

1

オーバーライドPrepareForSegueを助ける場合に非常に感謝しています。あなたはパラメータを渡すことができるように移動先のコントローラ上のパブリックメソッドやプロパティを定義する必要があります。差出人:)方法:

いくつかのソリューションがあります
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のコンテキストに基づいて、関連するデータを新しいView Controllerまたは ウィンドウコントローラに渡すために、このデータをオーバーライドできます。セグオブジェクト は遷移を記述しており、セグの両方に関与する両方のコントローラ への参照を含みます。

Segueは複数のソースからトリガーされる可能性があるので、segueパラメータとsenderパラメータに という情報を使用して、アプリ内の異なる 論理パスを曖昧にする必要があります。たとえば、セグが テーブルビューから発生した場合、送信者パラメータは、ユーザ がクリックしたセルを識別します。その情報を使用して デスティネーションビューコントローラのデータを設定することができます。

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

そして次のVCに設定します:あなたはdidSelectRowに渡したい物を "保存" する必要がTHI場合

- (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 :)メソッド必要がある。この方法:

戻り値指定 識別子列に対応するビューコントローラを。表示コントローラが 文字列に関連付けられていない場合、このメソッドは例外をスローします。

説明このメソッドを使用して、 アプリケーション内でプログラムで操作して表示する、 のView Controllerオブジェクトを作成します。このメソッドを使用してビュー コントローラを取得する前に、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

関連する問題