按钮sender.superview显示为UIViewController而不是我的CustomCell?

时间:2012-10-22 08:43:55

标签: ios cocoa-touch uitableview

我在单元格中有一个按钮,它有一个自定义单元格的插座,它在我的第一个视图控制器中有一个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。似乎只是完全跳过牢房和桌子。我错过了什么简单的事情?

更新

好的,所以我向你展示了完整的IBAction,在评论出我的单元格变量显示为CustomCell(正确的superview)的最后两行之后,现在我的tableView变量显示的是FirstViewController superview而不是CustomTable?您的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>>

第二次更新:

似乎认为sender.superview是CellContentView而不是Cell本身,所以当我尝试获取indexPath时,它尝试将单元格用作表格,将CellContentView用作单元格。我认为没有必要通过ContentView,我认为。按钮上的超级视频将直接进入单元格本身?

已经回答了:

好像你必须按此顺序浏览层次结构。

按钮 - &gt; CellContentView - &gt;细胞 - &gt;的TableView

1 个答案:

答案 0 :(得分:2)

我认为在接口构建器中连接IBOutlets时出错了。

在操作中设置断点并尝试在调试器中递归地记录整个视图以进行检查:

  

po [[self view] recursiveDescription];

<强>更新

看起来您已根据更新将操作添加到单元格而不是按钮..

更新2:

- (IBAction) AddButton:(UIButton *)sender{

    UIView *cellContentView = (UIView *)sender.superview;
    ProductCell *cell = (ProductCell *)cellContentView.superview;
    UITableView *tableView - (UITableView *)cell.superview;
    NSIndexPath *indexPath = [tableView indexPathForCell:cell];

}

或者您可以在此方法中为按钮指定标记:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    //your setup code here..

    cell.yourButton.tag = indexPath.row;

}

..如果您只有1个部分,请到达索引路径:

- (IBAction) AddButton:(UIButton *)sender{
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:sender.tag inSection:0];
}

应该这样做!