在 tableview 上添加按钮 - 无法访问发件人

Posted

技术标签:

【中文标题】在 tableview 上添加按钮 - 无法访问发件人【英文标题】:Adding buttons on tableview - can't access the sender 【发布时间】:2012-07-01 19:44:04 【问题描述】:

我已使用以下代码向我的 tableviewcell 添加按钮,当按下按钮时,我需要知道它是哪一行。所以我标记了按钮(playButton viewWithTag:indexPath.row) 问题是,如果我定义目标操作方法(播放)来接收发送者,它会因“无法识别的选择器”而崩溃,任何想法如何知道按钮在哪一行被按下或为什么它会像这样崩溃 谢谢

-(void)configureCell: (UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath 
UIButton *playButton = [UIButton buttonWithType:UIButtonTypeCustom] ;
[playButton setFrame:CGRectMake(150,5,40,40)];
[playButton viewWithTag:indexPath.row] ; //Tagging the button
[playButton setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
[playButton addTarget:self action:@selector(play) forControlEvents: UIControlEventTouchUpInside];
[cell addSubview:playButton];

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *beatCell = nil;
beatCell = [tableView dequeueReusableCellWithIdentifier:@"beatCell"];
if (beatCell == nil)
    beatCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"beatCell"];

 [self configureCell:beatCell atIndexPath:indexPath];
return beatCell;

-(void) play:(id) sender
UIButton *play = sender;
NSLog(@"Play %i" , play.tag);

【问题讨论】:

【参考方案1】:

代替

[playButton viewWithTag:indexPath.row] ; 

如果您尝试接收 UIButton 的子视图(我不知道为什么),您应该使用 setter 方法设置标签:

[playButton setTag:indexPath.row];

您还必须将您的发件人转换为 UIButton 类型

-(void) play:(id) sender
UIButton *play = (UIButton *)sender;
NSLog(@"Play %i" , play.tag);

【讨论】:

谢谢,您的添加非常重要,因为我刚刚得到零,现在它正在工作!!!!【参考方案2】:

改变这一行的一个字符:

[playButton addTarget:self action:@selector(play) forControlEvents: UIControlEventTouchUpInside];

[playButton addTarget:self action:@selector(play:) forControlEvents: UIControlEventTouchUpInside];

当您在选择器上包含参数时,冒号实际上对于 Objective C 运行时能够在您的目标对象上查找该选择器很重要。

【讨论】:

谢谢迈克尔,这很有帮助

以上是关于在 tableview 上添加按钮 - 无法访问发件人的主要内容,如果未能解决你的问题,请参考以下文章

斯威夫特 Xcode 11.4。将返回按钮添加到 TableView 导航项

在 Tableview 上添加开关按钮并禁用单元格选择

Swift:使用 StoryBoard 在 Tableview 上浮动加号按钮

iOS:Tableview 页脚视图在 Scroll 上弹跳

reloadData后无法单击tableView单元格中的按钮

使用 TableView 和刷新控件将按钮添加到 UISearchBar