5

我在情节提要的原型单元格上有一个自定义附件视图(一个 UIButton)。当我单击该按钮时,不会调用点击的附件按钮的委托方法。如果我使用标准的披露按钮,它就可以正常调用。我假设我错过了某个地方的连接。有谁知道在哪里?

4

3 回答 3

2

附件委托方法的苹果文档说

代理通常通过显示与所选行相关的新视图来响应对公开按钮(附件视图)的点击。为 indexPath 处的行设置辅助视图时,不会调用此方法。

因此自定义附件视图不调用它。这是一种标准行为。

于 2013-08-27T08:41:32.833 回答
2

猜想 1: 您实际上并没有“自定义附件视图”,而是UIButton将其放置在附件所在的位置。这不会触发委托附件轻按按钮,因为它不是真正的附件。

猜想 2: 您确实有一个真正的附件视图,但它永远不会收到“点击”事件,因为您有一个UIButton正在吃用户交互但没有触发动作的事件。在这种情况下,尝试添加一个简单的UIView代替。

除此之外,我需要更多信息。

于 2013-03-20T17:38:23.373 回答
1

我最终使用自定义表格单元格的协议解决了这个问题。

CustomAccessoryTableCellDelegate.h

@protocol CustomAccessoryTableCellDelegate <NSObject>

     @required
     - (void) accessoryButtonTappedForCell: (UITableViewCell *) cell;

@end

CustomAccessoryViewTableCell.h

 @interface CustomAccessoryViewTableCell : UITableViewCell

      /** The custom accessory delegate. */
      @property (nonatomic, weak) id<CustomAccessoryTableCellDelegate> delegate;

 @end

CustomAccessoryViewTableCell.m

- (IBAction) buttonAction:(id)sender{

    if ([self.delegate respondsToSelector:@selector(accessoryButtonTappedForCell:)]) {
        [self.delegate accessoryButtonTappedForCell:self];
    }

}

表视图控制器内部

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    CustomAccessoryViewTableCell *cell = [tableView
                         dequeueReusableCellWithIdentifier:@"MyCustomCell"];

    cell.label.text = @"Some Name";
    cell.delegate = self;

    return cell;
 }

#pragma mark - Custom Accessory View Delegate

- (void) accessoryButtonTappedForCell:(UITableViewCell *)cell{
    [self tableView:self.writerTable 
        accessoryButtonTappedForRowWithIndexPath: [self.writerTable
                                                      indexPathForCell:cell]];
}
于 2013-03-20T18:06:16.923 回答