未调用accessoryButtonTappedForRowWithIndexPath

时间:2009-06-06 15:11:58

标签: iphone cocoa-touch

我的应用程序完全适用于模拟器和iPhone OS 2.2.1设备。 但我也有安装了iPhone OS 3.0的设备。当我点击公开按钮时,未调用accessoryButtonTappedForRowWithIndexPath方法,但公开按钮的颜色变暗。

有人遇到过这样的问题吗?

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

现在OS 3.0正式出现了:

问题在于UITableViewCell的accessoryType属性。改为使用tableView:accessoryTypeForRowWithIndexPath:delegate方法,只要你的目标是OS 2.x和OS 3.x.

答案 1 :(得分:0)

不幸的是,“accessoryTypeForRowWithIndexPath”已被弃用。

不同行为的线索(在UITableViewCellAccessoryDisclosureIndicator和UITableViewCellAccessoryDe​​tailDisclosureButton之间)是披露指示器不“跟踪”,而披露按钮确实“跟踪”。

您需要做的是提供您自己对用户在单元格中点击的位置的识别,并将其用作附加代码的一部分,然后调用您的

- (void)tableView:(UITableView*) tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath*) indexPath

例程 - 这是披露BUTTON所发生的事情。

您可能希望在自定义单元格中使用附加到AccessoryView的UITapGestureRecognizer之类的内容。这个东西通常是NIL,所以你需要通过IB或者以编程方式将UIView添加到单元格中 - 调整它的大小 - 并将它连接到你的单元格对象。然后,您将向自定义单元格的- (id)initWithStyle:(UITableViewCellStyle) style reuseIdentifier:(NSString*) reuseIdentifier函数添加一些代码。

总体思路如下所示。

 UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] 
    initWithTarget:myAccessoryView action:@selector(didTap:)];
    tapGesture.delegate = (id <UIGestureRecognizerDelegate>)myTableViewControllerDelegate;
    [containerView addGestureRecognizer:tapGesture];
    [tapGesture release];

'didTap:'函数会转发您的代码,或者只是执行您在其他例程中可能执行的操作。

令人遗憾的是,三种不同的配件被区别对待。所以,如果你不想在你的单元格中有一个巨大的蓝色东西,看起来你必须提出一些额外的代码来让事情按照你的意愿工作。

在自定义单元格中使用AccessoryView的一个好处是,您可以在视图中放置UIImageView,然后在UIImageView中存放图像 - 这意味着您可以使用任何图像而不是简单的披露“&gt;”。