2009-06-06 6 views
4

私のアプリは、シミュレータとiPhone OS 2.2.1デバイスで完全に動作しています。 でもiPhone OS 3.0がインストールされたデバイスがあります。また、公開ボタンをタップすると、accessoryButtonTappedForRowWithIndexPathメソッドは呼び出されませんが、公開ボタンの色は暗くなります。accessoryButtonTappedForRowWithIndexPathが呼び出されていない

誰もこのような問題に直面しましたか?

どうすればこの問題を解決できますか?

答えて

1

今ではOS 3.0は、ドアの外に正式です:

問題はUITableViewCellののaccessoryTypeプロパティです。 OS 2.xとOS 3.xの両方をターゲットにしている限り、代わりにtableView:accessoryTypeForRowWithIndexPath:delegateメソッドを使用します。

0

残念ながら、「accessoryTypeForRowWithIndexPath」は廃止されました。

異なる動作(UITableViewCellAccessoryDisclosureIndicatorとUITableViewCellAccessoryDe​​tailDisclosureButtonの間)の手がかりは、開示INDICATORは「追跡」しないが、開示ボタンは「追跡」するということです。

何をする必要があるだろうことは、ユーザーがセルにタップどこの独自の認識を提供して、あなたの

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

ルーチンを呼び出すために、追加のコードの一部としてそれを使用である - 何が起こるかであります開示ボタンで表示されます。

カスタムセルの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:'関数は、コードを転送するか、他のルーチンで行ったことを実行します。

3つの異なるアクセサリアイテムが異なる扱いを受けるのは残念です。だから、あなたのセルに巨大な青いものが欲しくないなら、あなたが望むように物事を動作させるためにいくつかの追加のコードを考えなければならないように見えます。

カスタムセルでAccessoryViewを使用する利点の1つは、UIImageViewをビューに配置し、UIImageViewに画像を配置できることです。つまり、単純な開示と対比して任意の画像を使用できます。

関連する問題