在UITableViewCell的UIView中没有为UIButton触发事件

时间:2012-03-23 22:56:52

标签: objective-c uitableview uibutton

在我的UITableViewCell中,我有一个带UIButton的UIImageView。

这是我的code

我的问题是,每当我尝试点击UIButton时,UITableViewCell都会被TouchUpInside事件而不是UIBUtton触发。

你能帮帮我吗?

2 个答案:

答案 0 :(得分:0)

这是我的代码..这里我在UIButton内使用了UITableViewCell,它对我来说非常有用..希望这会对你有帮助..

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *CellIdentifier = @"ChildList";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    itsChildContactsTableView = tableView;
    if (cell == nil) 
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                       reuseIdentifier:CellIdentifier] autorelease];
    }

    // we need a view to place our labels on.
    UIView *aTableCellContentView = [[UIView alloc] initWithFrame:CGRectZero];



    CGRect contentRect = aTableCellContentView.bounds;

    CGFloat boundsX = contentRect.origin.x;
    CGRect frame;

    frame = CGRectMake(boundsX + 10, 8, 200, 20);



    UIButton *aCallButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [aCallButton setImage:[UIImage imageNamed:@"call.png"] forState:UIControlStateNormal];
    [aCallButton addTarget:self action:@selector(dialNumber:) forControlEvents:UIControlEventTouchUpInside];
    [aCallButton  setTag:[indexPath row]];

    frame = CGRectMake(210, 14, 35, 35);
    aCallButton.frame = frame;

    UIButton *aEmailButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [aEmailButton setImage:[UIImage imageNamed:@"mail.png"] forState:UIControlStateNormal];
    [aEmailButton addTarget:self action:@selector(eMailContact:) forControlEvents:UIControlEventTouchUpInside];


    [aEmailButton  setTag:[indexPath row]];

    frame = CGRectMake(250, 14, 35, 35);

    aEmailButton.frame = frame;
    aTableCellContentView.backgroundColor = [UIColor whiteColor];
    [cell.contentView addSubview:aCallButton];
    [cell.contentView addSubview:aEmailButton];
    [cell.contentView addSubview:aTableCellContentView];
    [aTableCellContentView release];
    return cell;
}

答案 1 :(得分:0)

如果您的UITableViewCell具有客户高度(不是默认的44.0f)。如果是这样,您应该设置如下代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellID = @"cellID";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
        cell.contentView.frame = CGRectMake(0, 0, tableView.width, [self tableView:tableView heightForRowAtIndexPath:indexPath]);
        // add a UIButton that you create
    }
    return cell;
}

出现此问题的原因是cell.contentView.size是默认值(320.f,44.0f),如果您的按钮位于rect上,则该按钮无法接受该事件,因此您应该设置该单元格。 contentView.frame自己,就像我做代码一样。

祝你好运。