gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:59:55 29 4
gpt4 key购买 nike

我在单元格中有按钮,它有一个自定义单元格的导出,并且在我的第一个 View Controller 中有一个 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 (正确的 super View ),但现在我的 tableView 变量显示的是 FirstViewController super View 而不是 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,我认为按钮中的 .superview 会直接进入单元格本身?

已回答:

似乎您必须按此顺序遍历层次结构。

按钮 -> CellContentView -> 单元格 -> TableView

最佳答案

我认为在界面构建器中连接 IBOutlet 时出现了问题。

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

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];
}

应该这样做!

关于ios - 按钮 sender.superview 显示为 UIViewController 而不是我的 CustomCell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13007734/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com