UITableViewCell内的事件在y值以下无法正常工作

时间:2012-02-24 08:56:16

标签: iphone objective-c ios cocoa-touch uitableview

我的按钮在我的表格单元格中的某个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。

有人可以告诉我我做错了什么吗? 提前谢谢。

修改 添加了屏幕截图:

enter image description here

红色按钮工作正常但如果我将它放在绿色按钮的位置则停止工作。 contentview的背景设置为紫色,以便解释紫色区域。单击单元格时会触发didSelectRowAtIndexPath,所以我猜测单元格本身也足够大。

1 个答案:

答案 0 :(得分:3)

这绝对是内容大小问题。您的按钮将显示在框架之外,类似于CSS中的溢出,但它们不会响应事件。所以无论UIView包含你的UIButton,你需要确保它的内容/帧/边界都设置得足够高。您也可以使用[cell.contentView sizeToFit]自动调整它的内容。

您绝对不应该为UITableView的协议方法重新加载数据。