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;


}

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

以下の方法では、正しい行を取得しています。ivarを使用したくない場合に、正しい行をセグエの準備にする方法はありますか?

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

arow = indexPath.row;

}

ここに画像の説明を入力してください


tableViewCellアクセサリボタン:モーダルセグエの実行(編集)
+ボタン(ナビゲーションバーボタン項目):モーダルセグエの実行(追加)

4

3 に答える 3

33

ストーリーボードにアクセサリアクションを接続している場合、入力はタップされたセルになりますsenderprepareForSegue:sender:これは、あなたが次のようなことをすることができることを意味します

NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
于 2013-02-11T14:33:23.283 に答える
3

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

于 2013-02-11T14:18:29.463 に答える
0

SWIFT3.0ソリューション; Objective-Cバージョンと非常によく似ています。つまり、Cellは送信者であり、アクセサリが押されたCellを介してindexPathを受信します。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? YourViewController {
        let indexPath = tableView.indexPath(for: sender as! UITableViewCell)!
    }
}
于 2016-10-27T20:43:47.597 に答える