2011-10-08 14 views
2

私はthis質問への答えに記述されているようにカスタム編集アクセサリビューを実装しました。ほとんどの場合、それはとてもうまく動作しますが、私はそれに小さな問題があることに気付きました。UITableViewCellカスタムeditingAccessoryView - 正しく却下されなかった

テーブルビューで別の行をスクロールまたは選択すると、カスタム編集アクセサリが閉じられません。標準の編集アクセサリ(削除ボタン)を使用すると、テーブル上の他の場所のタッチをキャプチャして削除アクセサリビューを削除することができます。これは、組み込みのNotesアプリケーションや、標準の編集アクセサリビューです。

これは、私がスワイプ・ツー・デリート・モードになっているときにUITableViewEditingStyleNoneを返すためです。しかし、私が他のモードを返すと、カスタム編集アクセサリは表示されません。

標準の編集スタイルの機能を取り戻すにはどうすればいいですか?テーブルビューの任意の場所で編集アクセサリを閉じることができますか?

セルはサブクラス化されていませんが、カスタムレイアウトのnibファイルからロードされます。編集アクセサリビューはnibファイルの一部であり、editingAccessoryViewアウトレットを介して接続されています。

スワイプ編集の行のインデックスパスを保存し、別の行が選択されているかスクロールがテーブルで開始されている場合、そのセルを編集モードから外して、私が望む効果を途中まで達成できました。しかし、私はそれを正しくしたいと思います。

+0

@jrturton私は同じ問題を抱えています。私はhttp://stackoverflow.com/questions/7295834/custom-editingaccessoryview-not-working?lq=1を参照しています。ありがとうございました! –

答えて

2

私はこれを解決することができましたが、悲しいことに追加の足取りを必要とし、カップルのプロパティを設定するだけでは簡単ではありません。私のカスタムeditingAccessoryViewが表示されますように、私はUITableViewCellEditingStyleNoneを返す私の

- (UITableViewCellEditingStyle)tableView:(UITableView *)_tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 

方法で

。この方法では、私もこの操作を行います。

self.tableView.scrollEnabled = NO; 
if(self.editingPath) 
{ 
    [[tableView cellForRowAtIndexPath:editingPath] setEditing:NO animated:YES]; 
} 

self.editingPath = indexPath;  
for (UITableViewCell *cell in [tableView visibleCells]) 
{ 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 
} 

これはスクロールを無効にし、その後、私たちは、後で使用するためにスワイプindexPathを格納します。行を編集中に別の行をスワイプすると、最初の行の編集が解除され、2番目の行が編集されます。これはAppleアプリケーションの動作です。私はまた、すべての目に見えるセルのセルselectionStyleUITableViewCellSelectionStyleNoneに設定しました。これにより、ユーザーが現在編集している間に別のセルを選択すると、青いちらつきが減少します。

次に、別のセルがタップされたときにaccessoryViewを却下する必要があります。私たちは、このメソッドを実装することを行うには:誰かが私たちはそのセルuneditの後、編集している場合は、セルをクリックして、何も返さないとしているときに、これは何

-(NSIndexPath *)tableView:(UITableView *)_tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if(self.editingPath) 
{ 
    UITableViewCell *c = [tableView cellForRowAtIndexPath:self.editingPath]; 
    [c setEditing:NO animated:YES]; 

    self.tableView.scrollEnabled = YES; 
    self.editingPath = nil; 
    for (UITableViewCell *cell in [tableView visibleCells]) 
    { 
     cell.selectionStyle = UITableViewCellSelectionStyleBlue; 
    } 

    return nil; 
} 

return indexPath; 
} 

です。

-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 

にも

私は、ユーザーが削除できるようにしたいセルに編集を可能にするために、YESを返します。

関連する問題