セル内にボタンがあり、カスタムセルへの出口があり、最初のViewController内にIBActionがあります。
-(IBAction)AddButton:(UIButton *)sender{
ProductCell *cell = (ProductCell *)sender.superview;
UITableView *tableView - (UITableView *)cell.superview;
NSIndexPath *indexPath = [tableView indexPathForCell:cell];
NSLog(@"Sender: %@, Super: %@", sender, sender.superview);
//[saveitemArray addObject: [itemArray objectAtIndex:(indexPath.row + 1)]];
//[saveitemArray writeToFile:[self saveListPath] atomically:YES];
}
コードをステップスルーすると、送信者はUIButtonとして表示されますが、変数'cell'はFirstViewControllerとして表示されます。セルとテーブルを完全にスキップしているようです。私が見逃している簡単なことは何ですか?
アップデート:
さて、最後の2行をコメントアウトした後、完全なIBActionを表示しましたが、セル変数はCustomCell(正しいスーパービュー)として表示されていますが、tableView変数はCustomTableではなくFirstViewControllerスーパービューを表示していますか?NSLogも同じように表示されたので、cellとcell.superviewを表示するように変更しました。結果は次のとおりです。
Sender: <UITableViewCellContentView: 0x716fb20; frame = (0 0; 320 43);
gestureRecognizers = <NSArray: 0x71711d0>; layer = <CALayer: 0x716fbd0>>, Super:
<ProductCell: 0x716f820; baseClass = UITableViewCell; frame = (0 0; 320 44); autoresize
= W; layer = <CALayer: 0x716f990>>
2番目の更新:
sender.superviewはCell自体ではなくCellContentViewであると思われるため、indexPathを取得しようとすると、セルをテーブルとして使用し、CellContentViewをセルとして使用しようとします。ContentViewを通過する必要はないと思いましたが、ボタンからの.superviewはセル自体に直接移動すると思いましたか?
回答:
この順序で階層を通過する必要があるようです。
ボタン->CellContentView->セル->TableView