2013-02-11 34 views
16
if([segue.identifier isEqualToString:@"Edit"]){ 

    AddCoffeeViewController *avc = [segue destinationViewController]; 

    Coffee *coffeeObj = [appDelegate.coffeeArray objectAtIndex:arow]; 
    NSLog(@"ViewController.m prepareForSegue: arow: %d coffeeName:%@ price:%@  coffeeID:%d",arow,coffeeObj.coffeeName,coffeeObj.price,coffeeObj.coffeeID); 
    [coffeeObj setIsInEditMode:YES]; 
    avc.EditCoffeeObj = coffeeObj; 


} 

アクセサリボタンを押しているときに正しい行が表示されません。

以下の方法では正しい行を取得していますが、 私はイーグルを使用したくない場合、正しい行をセグに準備する方法はありますか?インデックスパスの行が表示されず、詳細情報が表示されない場合があります。

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{ 

arow = indexPath.row; 

} 

enter image description here


tableViewCellアクセサリーボタン:モーダルセグエを実行する(編集)
+ボタン(ナビゲーションバーボタンアイテム):モーダルセグエを実行する(追加)

+0

を押したアクセサリーにセルを通じてindexPathを受けますか? –

+0

私はコーヒークラスのオブジェクトを渡したいと思います。使用する場合は[self performSegueWithIdentifier:@ "Edit" sender:nil]と入力します。それから私はコーヒークラスのオブジェクトを渡すことができるものがあります。 –

+0

注:アクセサリボタンからsegueを呼び出すことは、iOS6で初めて導入されました。適切な回避策は、カスタムセルを作成してそれにボタンを追加し、そのボタンからセグを呼び出すことです。 – Groot

答えて

34

ストーリーボードにアクセサリアクションを追加した場合、のprepareForSegue:sender:はタップされたセルになります。これはあなただけ

NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; 
+0

あなたの解決策は正しいです。たくさんありがとうございます。私はなぜいくつかの人々が私の質問に否定的な投稿をしている理由を理解していない。ちょうどあなたが同じ問題に直面することを試してみてください。 –

+0

あなたはおいしい。ありがとうたくさんありがとう –

+0

ありがとう。 – shaikh

3

アクセサリボタンをタップし、選択された行は2つの異なるものです。 accessoryButtonTappedForRowWithIndexPathでは、indexPathをグローバル変数に設定してから、それをセグに使用します。

0

SWIFT 3.0ソリューションような何かを行うことができることを意味し; Objective-Cバージョンに非常によく似ています。だから、セルは、送信者であり、我々はちょうどaccessoryButtonTappedForRowWithIndexPath内に直接セグエの準備を置かないのはなぜ

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let destination = segue.destination as? YourViewController { 
     let indexPath = tableView.indexPath(for: sender as! UITableViewCell)! 
    } 
} 
関連する問題