2013-07-12 24 views
13

セルのデフォルトの編集モード動作を置き換えようとしています。UITableViewCellカスタム編集ビュー

左のアクセサリビューの赤い円が表示されないようにします。

編集モードに入ると、コンテンツビューを左に移動する必要があります。&は、削除ボタンを表示します。私が持っているもの

は、これまでのところ(カスタムのUITableViewCell)が優先されます: setEditing:NO setEditing:YES

上記のコードは素晴らしい作品:

-(void) setEditing:(BOOL)editing animated:(BOOL)animated 
{ 
    /* don't call super */ 
// [super setEditing:editing animated:animated]; 
    _isEditing = editing; 

    CGFloat newContentViewX = 0.0f; 
    UIColor *newDeleteButtonColor = [UIColor clearColor]; 

    if (_isEditing) 
    { 
     newContentViewX = -40.0f; 
     newDeleteButtonColor = [UIColor redColor]; 
    } 

    if (animated) 
    { 
     [UIView animateWithDuration:0.5f 
           delay:0.0f 
          options:UIViewAnimationOptionCurveEaseInOut 
         animations:^ 
     { 
      self.contentView.x = newContentViewX; //change frame.origin.x 
      _deleteButton.backgroundColor = newDeleteButtonColor; 
     } 
         completion:nil]; 
    } 
    else 
    { 
     self.contentView.x = newContentViewX; //change frame.origin.x 
     _deleteButton.backgroundColor = newDeleteButtonColor; 
    } 
} 

-(BOOL) editing 
{ 
    return _isEditing; 
} 

&これが結果です! &のスクロールが始まるまで、contentviewはリセットされます。最初の画像に戻ります。編集フラグがコンテンツビューフレームの変更を維持していません。

私は、この行追加しました:それは私のcontentviewが元の位置&ない更新

ショートユーチューブ動画説明する問題にまだある正しく&設定編集モードを呼び出しているが、cellForRowAtIndexPath &に

[cell setEditing:_tableView.isEditing animated:NO]; 

を: Youtube link

他にもこの問題がありましたか?

+5

youtubeビデオを作るためだけに+1を取得する必要があります。今非常に分かりやすい。 –

答えて

2

あなたの問題は、UITableViewがcellForRowAtIndexPathから返されたセルで適切な状態レイアウトを「有益に」設定していることです。

これを処理する最も簡単な方法は、セルクラスの-layoutSubviewsをオーバーライドすることです。

- (void)layoutSubviews 
{ 
    if (self.editing) 
    { 
    CGRect bounds = self.bounds; 
    // do your custom layout 
    } 
    else 
    [super layoutSubviews]; 
} 

これはかなり整理されています。

3

コンテンツビューフレームを改ざんしないでください。ボタンを作成してeditingAccessoryViewと設定すると、プレゼンテーションが完了します。

+0

はい、左に( - )の丸ボタンが表示され、コンテンツの表示が右に移動します。 – Ryan

+1

'tableView:editingStyleForRowAtIndexPath:' UITableViewCellEditingStyleNone'を返します。また、セルを編集モード(スワイプ削除用)に設定する方法とタイミングをカスタマイズすることもできます。 – Wain

1

UITableViewがsetEdittingメッセージを子セルに渡す方法の副作用があるようです。ドキュメントは、TVがこのメッセージをVISIBLEセル(唯一)に送信すると述べています。したがって、新しい/デキューされたセルが可視になると、setEdittingメッセージを持たないため、_editting = NOとなります。したがって、あなたはテストして、tableView:cellForRowAtIndexPath:メソッドでセルの_editting = YESを設定する必要がありますし、表示された削除ボタンでスクロール動作を取得する必要があります。

関連する問題