2009-06-06 37 views
4

我有我的应用程序可以完美地在模拟器和iPhone OS 2.2.1设备上工作。 但我也有安装了iPhone OS 3.0的设备。当我点击披露按钮时,不会调用accessoryButtonTappedForRowWithIndexPath方法,但披露按钮的颜色会变深。accessoryButtonTappedForRowWithIndexPath不被调用

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

我该如何解决这个问题?

回答

1

现在OS 3.0正式出了门:

问题是与UITableViewCell中的accessoryType财产。使用tableView:accessoryTypeForRowWithIndexPath:delegate方法,只要您的目标是OS 2.x和OS 3.x.

0

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

UITableViewCellAccessoryDisclosureIndicator和UITableViewCellAccessoryDe​​tailDisclosureButton之间的不同行为的线索是,披露INDICATOR没有“追踪”,而披露BUTTON没有“追踪”。

你必须做的是提供自己的认可,其中在电池输出和用户使用,作为额外的代码部分,然后打电话到您的

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

程序 - 这是发生了什么与披露按钮。

您可能想要使用类似UITapGestureRecognizer的东西附加到您的自定义单元格中的AccessoryView。这个东西通常是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中放置图像 - 这意味着您可以使用任何图像而不是简单的公开“>”。