2012-02-18 19 views
9

私は、Storyboard/Segueを使用して、標準のトランジションと詳細の両方の開示ボタンを持つUITableView間のトランジションを処理しようとしています。ここにはいくつかの異なった記事を読んだ私は、このように私のプロジェクトを設定している:accessoryButtonからのSegueのIndexPath

  • 新しいViewControllerを親のViewControllerからタイの二次セグエ
  • のUITableViewCellとのViewControllerの間

    1. タイの主要セグエを次のようにaccessoryButtonTappedForRowWithIndexPathを実装します:

      -(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { 
          [self performSegueWithIdentifier:@"DetailSegue" sender:self]; 
      } 
      

    これは素晴らしい作品と私​​のprepareForSegue: sender:は、cを取得します期待どおりにalled。問題は、私は選択された要素のindexPathを知る必要があるということです。 UITableViewCellからセグエがindexPathこのように取得します。私はaccessoryButton呼ばれたことを実行しようとするとき

    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
    

    は残念ながら、 nullを返します。

    私はのオフに、このコードの一部を基づかています元の質問はここにある:Detail Disclosure Button and Segues

    accessoryButtonsためindexPathを返すのtableViewする方法はありますか?他の方法でindexPathにアクセスする必要がありますか?

    答えて

    16

    にあなたはaccessoryButtonTappedForRowWithIndexPathを上書きする必要がないことIVARとアクセスにインデックスパスを格納します。 prepareForSegue

    、代わりに、詳細開示ボタンでの作業:

    [self.tableView indexPathForSelectedRow] 
    

    使用:

    [self.tableView indexPathForCell:sender] 
    

    送信者は、既に、詳細開示ボタンの細胞です。

    +2

    ありがとうアダム、これは受け入れられた答えでなければなりません! – Pat

    +0

    私がこれをしたとき、送信者は私がいるTableViewControllerでした。performSegueで、私は送信者としてセルを渡しました –

    +0

    Swift 3でこれをどうやってやるのですか? – nyxee

    13

    sender引数はマニュアルに従って、次のとおりです。

    あなたはセグエを開始するために使用するオブジェクト。このオブジェクトは、実際のセグの間に情報提供のために利用可能になります。

    あなたがprepareForSegue:にインデックスパスにアクセスし、代わりにselfの送信者としてのインデックスパスを使用することはできませんなぜ私はいかなる理由が表示されません。

    問題が解決しない場合は、prepareForSegue

    +0

    送信者としてindexPathを渡すと正常に動作します。一度それが言及されると、かなり明白に見えます。ありがとう。 – valdarin

    +0

    偉大なアイデア、私は、この情報を渡すためにローカル変数を必要とするかもしれないと思うのが邪魔になりました – trapper

    関連する問題