将按钮添加到 UITableViewCell
Posted
技术标签:
【中文标题】将按钮添加到 UITableViewCell【英文标题】:Add button to UITableViewCell 【发布时间】:2012-01-12 14:20:10 【问题描述】:我想在UITableViewCell
中添加一个按钮。这是我的代码:`
if (indexPath.row==2)
UIButton *scanQRCodeButton = [[UIButton alloc]init];
scanQRCodeButton.frame = CGRectMake(0.0f, 5.0f, 320.0f, 44.0f);
scanQRCodeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
scanQRCodeButton.backgroundColor = [UIColor redColor];
[scanQRCodeButton setTitle:@"Hello" forState:UIControlStateNormal];
[cell addSubview:scanQRCodeButton];
`
现在,当我运行应用程序时,我只看到一个空白行!有什么想法吗?
【问题讨论】:
添加[cell.contentView addSubview:scanQRCodeButton];
后也可以松开按钮[scanQRCodeButton release];
【参考方案1】:
虽然将它放在单元格的 contentView 中是很自然的,但我相当确定这不是问题(实际上,在过去,我从来没有在 contentView 中正确显示过子视图,所以我一直使用单元格)。
无论如何,问题涉及开始创建按钮时的前三行。前两行很好,但代码停止工作:
scanQRCodeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
buttonWithType: 实际上是一种创建按钮的便捷方法(它就像一个紧凑的 alloc-init)。因此,它实际上“取消”了您过去的两行(您基本上创建了两次按钮)。您只能将 init 或 buttonWithType: 用于同一个按钮,但不能同时使用。
UIButton *scanQRCodeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
scanQRCodeButton.frame = CGRectMake(0.0f, 5.0f, 320.0f, 44.0f);
scanQRCodeButton.backgroundColor = [UIColor redColor];
[scanQRCodeButton setTitle:@"Hello" forState:UIControlStateNormal];
[cell addSubview:scanQRCodeButton];
这将起作用(请注意,如果需要,您可以使用 cell.contentView)。如果您没有使用自动引用计数 (ARC),我想提一下,您不必在内存管理方面做任何事情,因为 buttonWithType: 返回一个自动释放的按钮。
【讨论】:
是的。这就是问题所在。非常感谢。【参考方案2】: UIButton *deletebtn=[[UIButton alloc]init];
deletebtn.frame=CGRectMake(50, 10, 20, 20);
deletebtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[deletebtn setImage:[UIImage imageNamed:@"log_delete_touch.png"] forState:UIControlStateNormal];
[deletebtn addTarget:self action:@selector(DeleteRow:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:deletebtn];
或
// 下载类并导入你的项目UIButton+EventBlocks
UIButton *deletebtn=[UIButton buttonWithType:UIButtonTypeRoundedRect];
[deletebtn setFrame:CGRectMake(170,5, 25, 25)];
deletebtn.tag=indexPath.row;
[deletebtn setImage:[UIImage imageNamed:@"log_delete_touch.png"] forState:UIControlStateNormal];
[deletebtn setOnTouchUpInside:^(id sender, UIEvent *event)
//Your action here
];
[cell addSubview:deletebtn];
【讨论】:
【参考方案3】:您想将任何自定义 UI 元素添加到单元格的 contentView
。
所以,而不是[cell addSubview:scanQRCodeButton];
做[cell.contentView addSubview:scanQRCodeButton];
【讨论】:
【参考方案4】:尝试添加[cell.contentView addSubview:scanQRCodeButton];
,或者如果您想要左侧的按钮,请查看答案中的my question,将textLabel
移到一边。如果您想要右侧的按钮,那么只需将其设置为您的accesoryView
,就像这样cell.accesoryView = scanQRCodeButton;
。
【讨论】:
我也在 contentview 中添加了它,但它不起作用。我认为 Kevin Low 给出了解决方案。让我试试看。【参考方案5】:方法setTitle
在我的代码中不起作用,所以我使用了
[UIButton.titleLabel setText:@""]
而不是使用setTitle
方法。
请使用以下代码重试:
[scanQRCodeButton.titleLabel setText:@"Hello"];
那么它会很好用。
【讨论】:
以上是关于将按钮添加到 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章
将关闭按钮添加到 UIModalPresentationPageSheet 角落