iOS - 如何在该单元格中处理按钮事件时访问自定义单元格?

时间:2012-04-13 09:41:37

标签: iphone ios xcode cocoa

我有一个自定义单元格,在这个自定义单元格中,我有一个按钮和一个标签:

#import <UIKit/UIKit.h>

@interface ListCell : UITableViewCell{

}
@property (nonatomic, retain) IBOutlet UIButton* buttonContent;
@property (nonatomic, retain) IBOutlet UILabel* detailContent;

@end

当我处理按钮的点击事件时:

- (IBAction)expandListCell:(id)sender{
    UIButton *button = (UIButton *)sender;
    ListCell *cell = (ListCell *)button.superview;
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
    cell.detailContent.text = @"FALSE"; // It throw an exception   
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"listCell";
    ListCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];   
    cell.buttonContent.tag = indexPath.row;
    return cell;
}

当我尝试从我的自定义单元格(ListCell)访问任何项目时抛出异常:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCellContentView detailContent]: unrecognized selector sent to instance 0x8887ca0'

我认为我获得自定义单元格的方式是错误的。有人知道如何正确使用它吗? 提前谢谢

2 个答案:

答案 0 :(得分:4)

你确定你正在打电话给正确的班级吗? 你确定按钮的超级视图类是ListCell类吗?

尝试检查一下:

    // (...)
    ListCell *cell = (ListCell *)button.superview;
    if ([cell.class isSubclassOfClass:[ListCell class]]) {
        ///// just a check for indexPath: /////
        NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
        NSLog(@"current indexPath: %@", indexPath );
        ///////////// END CHECK ///////////////
        cell.detailContent.text = @"FALSE"; 
    }else{
        NSLog(@"NOT THE RIGHT CLASS!!!");
    }

答案 1 :(得分:1)

好吧,我很抱歉没有正确地提出你的问题你可以做的只是在你的标签视图中添加一个teg,然后再将其添加到单元格中,然后在回溯时使用

UILabel *name = (UILabel *)[cell viewWithTag:kLabelTag];

并设置标签

的文字