2009-06-06 36 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中放置圖像 - 這意味着您可以使用任何圖像而不是簡單的公開「>」。