将按钮添加到 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 角落

将返回按钮添加到操作栏

如何将三个按钮栏项目添加到 xib 文件

如何从列表视图按钮单击将多个数据添加到数组列表?

将按钮列添加到 DataGridView 并将条件文本仅应用于单击的按钮

将按钮添加到 WPF DataGrid