当该行不是UITableViewCell时,如何拦截点击UITableView行?

时间:2014-05-15 12:22:06

标签: ios

我曾经这样工作:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = UITableViewCellAccessoryNone;
}

但是现在我必须在不是UITableViewCell的单元格上做同样的事情: 我不得不在单元格中放入很多东西,所以我不能使用普通的UITableViewCells,而且我自己创建了它(称为PrototypeTableViewCell)。像这样:

@interface PrototypeTableViewCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *eventTitle;
@property (weak, nonatomic) IBOutlet UILabel *eventLocation;
@property (weak, nonatomic) IBOutlet UILabel *eventStartDate;
@property (weak, nonatomic) IBOutlet UILabel *eventEndDate;

@end

那么我怎么能做我以前在普通TableViewCells上做的事情(比如设置附件:checkmark)? “cellForRowAtIndexPath:indexPath”不适用于我创建的类。

1 个答案:

答案 0 :(得分:4)

您的PrototypeTableViewCell是UITableViewCell的子类。您只需将UITableViewCell转换为PrototypeTableViewCell,如下所示:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  // cast UITableViewCell to your PrototypeTableViewCell
  PrototypeTableViewCell *cell = (PrototypeTableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
  // use its properties as normal
  cell.accessoryType = UITableViewCellAccessoryCheckmark;
}