我已经看过并检查了有关向UIButton
添加UITableViewCell
的多个问题,但不知怎的,我无法找到我面临的确切问题。向UIButton
添加UITableViewCell
时,单元格的文本标签与按钮重叠。按钮位于行的开头,后面应该是文本标签。我很可能做错了什么,但我找不到什么。这是我的cellForRowAtIndex
代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell=[self._tableView dequeueReusableCellWithIdentifier:@"event"];
Event* event =[self eventForIndexPath:indexPath];
if(cell==nil)
cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"event"];
[[cell textLabel] setText:event.customer.name];
if(event.startTime!=nil)
[[cell detailTextLabel] setText:event.startTime];
cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
UIButton *cellButton =(UIButton*) [cell.contentView viewWithTag:CELL_BUTTON_TAG];
if(cellButton == nil){
UIButton *cellButton = [UIButton buttonWithType:UIButtonTypeCustom];
cellButton.tag=CELL_BUTTON_TAG;
[cellButton setFrame:CGRectMake(0.0f, 0.0f, 44.0f, cell.frame.size.height)];
[cellButton setImage:[UIImage imageNamed:@"van_green.png"] forState:UIControlStateNormal];
[cellButton setImage:[UIImage imageNamed:@"location.png"]forState:UIControlStateSelected];
[cellButton addTarget:self action:@selector(carButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
cellButton.layer.borderWidth = 0.0;
[cell.contentView addSubview:cellButton];
}
return cell;
}
答案 0 :(得分:2)
很抱歉,但您的代码完全错误。您使用的方法不正确,而且每次都添加一个按钮。
tableViewCell
重新,所以您必须在INIT单元格时添加按钮和其他UI元素而不是每次都添加,或者您的应用将完成记忆警告,崩溃,不流动等
执行您要执行的操作的正确方法是创建CustomTableViewCell
子类UITableViewCell
的子类并添加标签和按钮。这很简单:
1)创建一个扩展UITableViewCell
的新文件 CustomSearchCell 对象:
<强> CustomSearchCell.h 强>
#import <UIKit/UIKit.h>
@interface CustomSearchCell : UITableViewCell
@property (strong, nonatomic) UIButton *button;
@property (strong, nonatomic) UILabel *lblDetails;
@end
<强> CustomSearchCell.m 强>
#import "CustomSearchCell.h"
@implementation CustomSearchCell
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
_lblDetails = [[UILabel alloc] initWithFrame:CGRectMake(100, 10, 200, 45)];
[_lblDetails setFont:[UIFont systemFontOfSize:20.0]];
[_lblDetails setTextColor:[UIColor blackColor]];
_button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, self.frame.size.height)];
[self.contentView addSubview: _lblDetails];
[self.contentView addSubview: _button];
}
return self;
}
@end
2)在视图控制器中:
#import "CustomSearchCell.h"
和
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"ListCellIdentifier";
CustomSearchCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[CustomSearchCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
//Settings
return cell;
}
另一个问题是当你按下按钮时。您将收到发件人,但是当您拦截触摸时,tableViewCell将可用于不同的indexPath。小心......正确的方法是另一个......当您按下按钮时,您需要以某种方式保存实际的indexPath。 ..
答案 1 :(得分:1)
问题出在这一行[cell.contentView addSubview:cellButton];
。当您的单元格重复使用时,单元格已包含单元格按钮,您尝试再次添加该按钮。只需执行以下步骤即可解决此问题。
1)添加按钮标签以从基本视图中获取。
UIButton *cellButton = [UIButton buttonWithType:UIButtonTypeCustom];
cellButton.tag = CELLBUTTONTAG;
2)检查条件视图标记并将其添加到基本视图中,如下所示。
UIButton *cellButton = [cell.contentView viewWithTag:CELLBUTTONTAG];
if(cellButton == nil)
{
UIButton *cellButton = [UIButton buttonWithType:UIButtonTypeCustom];
cellButton.tag = CELLBUTTONTAG;
...
[cell.contentView addSubview:cellButton];
}
答案 2 :(得分:0)
你已经将手机按钮的位置设为0.0f。这是重叠的。尝试根据需要更改某些值。
[cellButton setFrame:CGRectMake(0.0f, 0.0f, 44.0f, cell.frame.size.height)];
到
[cellButton setFrame:CGRectMake(0.0f, some big value, 44.0f, cell.frame.size.height)];