无法使用单元格原型和故事板将目标添加到UITableViewCell内的UIButton

时间:2014-11-26 11:56:01

标签: ios objective-c uitableview uibutton

我在故事板中设置了单元格原型,并使用UIButton来选择执行特定操作。这是我的代码;

`

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"ProjectCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if(cell){
        UILabel *titleLabel = (UILabel *)[cell viewWithTag:101];
        titleLabel.text = @"New York";

        UIImageView *mainImage = (UIImageView *)[cell viewWithTag:102];
        [mainImage setImage:[UIImage imageNamed:@"nyc_temp.png"]];

        UITextView *descText = (UITextView *)[cell viewWithTag:103];
        [descText setText:@"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua..."];


        UIButton *selectButton = (UIButton *)[cell viewWithTag:104];

        [selectButton addTarget:self action:@selector(selectButtonPressed) forControlEvents:UIControlEventTouchUpInside];

    }

    return cell;
}

-(void)selectButtonPressed//:(id)sender withEvent:(UIEvent *)event
{
    NSLog(@"");
}

`

从不调用selectButtonPressed。我知道selectButton是正确的按钮,因为我可以更改viewWithTag线下方的文本,背景颜色等,为什么目标不会粘住?

更新:我已经更改了我的代码以使用自定义单元格类,但仍然没有运气,并且正如一个人建议明确地将按钮强制转换为UIButton(这不应该是我想到的吗?)

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"TemplateTableViewCell";

    TemplateTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    if(cell){
        UILabel *titleLabel = (UILabel *)[cell viewWithTag:101];
        titleLabel.text = @"New York";

        [cell.mainImage setImage:[UIImage imageNamed:@"nyc_temp.png"]];

        [cell.desc setText:@"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua..."];

        [cell.selectButton setUserInteractionEnabled:YES];

        [(UIButton *)cell.selectButton addTarget:self action:@selector(selectButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

    }

    return cell;
}

-(void)selectButtonPressed:(id)sender
{
    NSLog(@"");
}

仍然不起作用,我可以用其他方式与按钮交互,除了能够设置目标方法。它与触摸层次结构有关吗?

3 个答案:

答案 0 :(得分:0)

使用此代码

设置表格视图单元格按钮的操作
[(UIButton *)[cell.contentView viewWithTag:104] addTarget:self action:@selector(selectButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

并使用发件人

定义这样的方法
-(void)selectButtonPressed:(id)sender        
{        
  NSLog(@"Method called");        
}

答案 1 :(得分:0)

如果您在原型单元格中创建了selectButton,那么所有子视图都会添加到表格视图单元格的容器视图中,因此要获得带有标记的所需按钮,您必须调用:

[(UIButton *)[cell.contentView viewWithTag:104] addTarget:self action:@selector(selectButtonPressed) forControlEvents:UIControlEventTouchUpInside];

并确保您已为104提供tag selectButton值,并检查您是否未将104 tag值提供给任何其他视图。

答案 2 :(得分:0)

原来错误地在代码的另一部分中禁用了CELL userInteration,这阻止了任何触摸输入。