如何在UITableView上不使用自定义单元格的情况下添加按钮?

时间:2009-05-12 06:59:33

标签: iphone cocoa-touch uitableview

如何在UITableViewCell上添加自定义按钮,然后使用该按钮删除单元格而不使用Interface Builder和Custom Cell?

2 个答案:

答案 0 :(得分:8)

如果你真的想添加自定义按钮而不进行子类化,只需将按钮添加到单元格的contentView中:

[cell.contentView addSubview:customButton];

您可以设置按钮的所有特征:框架,目标,选择器等...然后广告使用上述调用将其添加到单元格中。

UIButton *customButton = [UIButton buttonWithType:UIButtonTypeCustom];
customButton.frame=//whatever
[customButton setImage:anImage forState:UIControlStateNormal];
[customButton setImage:anotherImage forState:UIControlStateHighlighted];
[customButton addTarget:self action:@selector(delete) forControlEvents: UIControlEventTouchUpInside];
//yadda, yadda, .....

你也可以标记它

customButton.tag = 99999;

所以你以后可以找到它:

UIButton *abutton = (UIButton*) [cell.contentView viewWithTag:99999];

您需要决定何时添加按钮,可能是在单元格选择上,也可能是在编辑模式下...只需将代码放入您选择的委托方法中。

答案 1 :(得分:1)

如果按钮的唯一目的是提供删除,您应该查看UITableViewDataSource,其中有一个名为- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath的方法。像这样实现它:

    - (BOOL)tableView:(UITableView *)tableView 
canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
   return YES; 
}

然后实施:

 - (void)tableView:(UITableView *)tableView 
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
 forRowAtIndexPath:(NSIndexPath *)indexPath 
{
   // Database removal code goes here...
}

要使用这些方法,请让UITableViewController通过执行以下操作来实施UITableViewDataSource协议:

MyClass : UITableViewController <UITableViewDataSource>

在头文件中,并务必记住将viewController的数据源设置为self