我的按钮在我的表格单元格中的某个y值以下工作时遇到了一些麻烦。我正在使用名为“RowWhiskyContent”的自定义UITableViewCell类。默认高度为44px,低于该点,我的事件似乎不再触发。按钮显示就好了,在该点之下的所有其他内容也是如此,但事件似乎没有触发。如果我将我的按钮放在一半(例如y = 35),只有按钮的顶部触发事件而底部不会做任何事情。
以下是修改为esentials的代码:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = nil;
if(![self createView:&cell])
{
UIImage *bottle = [UIImage imageNamed:@"icon_add.png"]; //image size: 22x22
UIButton *bottleButton = [[UIButton alloc] initWithFrame:CGRectMake(60, 70, bottle.size.width, bottle.size.height)];
[bottleButton setImage:bottle forState:UIControlStateNormal];
[cell.contentView addSubview:bottleButton];
[bottleButton addTarget:self action:@selector(addToCollection:) forControlEvents:UIControlEventTouchUpInside];
cell.contentView.frame = CGRectMake(cell.contentView.frame.origin.x, cell.contentView.frame.origin.y, cell.contentView.frame.size.width, 160);
//cell.frame = cell.contentView.frame; // Tried this, didn't work.
//[tableView reloadData]; // Tried this too, didn't work either.
}
return cell;
}
// Check if cell exists and create the cell if it doesn't.
-(BOOL) createView: (UITableViewCell**) cell
{
BOOL cellExists = YES;
*cell = (RowWhiskyContent *) [myTableView dequeueReusableCellWithIdentifier:@"ContentIdentifier"];
if(*cell == nil)
{
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"RowWhiskyContent" owner:self options:nil];
*cell = [topLevelObjects objectAtIndex:0];
cellExists = NO;
}
return cellExists;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
return 160;
}
由于我将单元格的高度和contentView都设置为160,所以我不确定这里出了什么问题。重新加载数据不起作用,也没有设置cell.frame。
有人可以告诉我我做错了什么吗? 提前谢谢。
修改 添加了屏幕截图:
红色按钮工作正常但如果我将它放在绿色按钮的位置则停止工作。 contentview的背景设置为紫色,以便解释紫色区域。单击单元格时会触发didSelectRowAtIndexPath
,所以我猜测单元格本身也足够大。
答案 0 :(得分:3)
这绝对是内容大小问题。您的按钮将显示在框架之外,类似于CSS中的溢出,但它们不会响应事件。所以无论UIView包含你的UIButton,你需要确保它的内容/帧/边界都设置得足够高。您也可以使用[cell.contentView sizeToFit]自动调整它的内容。
您绝对不应该为UITableView的协议方法重新加载数据。