2009-05-19 17 views
2

すべての行に公開ボタンを持つUITableViewがあります。テーブルを編集モードにし、削除コントロール(「 - 」記号)を押すと、削除ボタンが表示されますが、公開ボタンは置き換えられませんが、削除ボタンの左にスライドするだけです。IPhone UITableViewは、削除ボタンが表示されたときに開示ボタンを表示しません。

リンゴUITableViewガイドは、 " - "記号を押したときに削除ボタンが表示される前に呼び出されるデリゲートを除いて、デリゲートをすべて説明しています。

削除ボタンが表示されている間、開示インジケータを表示しないようにしたいと思います。

私は何かが欠けていると推測しています...テーブルのセルにsetHidesAccessoryWhenEditing:NO を設定して、行を選択するとインジケータが表示されるように指示します...

私がコピーしようとしている動作は、連絡先の編集時に連絡先アプリで行われます。すべてのヘルプは非常に...

おかげでいただければ幸いです、グレッグ

答えて

4

これを行う標準的な方法は、cell.hidesAccessoryWhenEditing = YESを使用することです。この編集は、通常はナビゲーションが無効になるモーダルアクションです。

実際に連絡先アプリケーションはカスタムテーブルセルを使用していますが、その動作によって判断して、画像がセルの右端にあるようにアクセサリをあまり使用しないと驚くことはありません。

あなたは削除ボタンが表示されたときに知りたい場合はそうのように、私は、あなたがセルのshowingDeleteConfirmationプロパティにキー値オブザーバをインストールしてみてくださいすることをお勧めしたい:

[cell addObserver: self forKeyPath: @"showingDeleteConfirmation" 
      options: NSKeyValueObservingOptionNew context: NULL]; 

その後、あなたはオブザーバのコールバックを実装方法:

- (void)observeValueForKeyPath: (NSString *) keyPath ofObject: (id) object 
         change: (NSDictionary *) change context: (void *) context 
{ 
    if ([keyPath isEqualToString: @"showingDeleteConfirmation"]) 
    { 
     UITableViewCell * cell = (UITableViewCell *) object; 
     BOOL isShowing = [[change objectForKey: NSKeyValueChangeNewKey] boolValue]; 
     if (isShowing == NO) 
      cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
     else 
      cell.accessoryType = UITableViewCellAccessoryNone; 
    } 
} 

私はUITableViewCellのクラスは、このプロパティのKVOに準拠しているかどうかはわからないことに注意する必要がありますが、試してみる価値があるはずだ...

+0

ジム 魅力的な作品です!私は本当にあなたが応答する時間を取っていただきありがとうございます... ありがとう、 グレッグ –

+1

あなたのソリューションで誰かが起こった場合、完全にするには、以下を追加してください: UITableViewCell * cell = object; if(isShowing) - > if(!isShowing)... –

+1

ありがとう、私はそれらを含めるように答えを更新しました。個人的に私は '== NO'を使用するのが好きです。 (C++のように)ブール型の特定のコンパイラサポートがない限り、前にあります。 ObjCのBOOL型はtypedefです(以前は文字サイズのものとchar型のBOOLとの比較で噛まれました)。 –

1

開示インジケータは、編集モードにいる間ので、多分あなたはアクセサリーの種類を変更することができtableView:accessoryTypeForRowWithIndexPath:によって管理されています。

tableView:accessoryButtonTappedForRowWithIndexPath:があると思います。モードを編集してから、各行に対してtableView:accessoryTypeForRowWithIndexPath:が返すものを変更することができます。編集モードのときはアクセサリはありません。

私はそれを試してみましょう。

アップルの参考文献であるInserting and Deleting Rows in Editing Modeの説明から、説明/チュートリアル/例を呼び出してみましょう。

1

ジムのソリューションへの私のコメントはうまくいきませんでした...ここに私の問題を解決したバージョンです...もう一度ジムに感謝!

 
    - (void)observeValueForKeyPath: (NSString *) keyPath ofObject: (id) object 
         change: (NSDictionary *) change context: (void *) context 
    { 
    UITableViewCell * cell = object; 
    if ([keyPath isEqualToString: @"showingDeleteConfirmation"]) 
    { 
     BOOL isShowing = [[change objectForKey: NSKeyValueChangeNewKey] boolValue]; 
     if (!isShowing) 
     { 
      cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
     } 
     else 
     { 

      cell.accessoryType = UITableViewCellAccessoryNone; 
     } 
    } 
} 

2

セルを作成しているときに、アクセサリタイプ:セルを定義することができます。editingAccessoryType = UITableViewCellAccessoryNone;

関連する問題