5

UITableView で編集状態を区別しようとしています。

編集ボタンをタップした後に編集モードになっているときにのみメソッドを呼び出す必要があるため、セルをスライドさせて小さな円形の削除アイコンが表示されますが、ユーザーがスワイプして削除するときは表示されません。

とにかく私は2つを区別することができますか?

ありがとう。

編集:

ロドリゴのおかげで解決

各セルとテーブルビュー全体の両方に「編集中」の BOOL 値があるため、すべてのセルをループして、複数のセルが編集されている場合は、テーブル全体が (ユーザーが編集ボタンをタップした) ことを認識しますが、 1 つが編集中である場合、ユーザーがセルをスワイプし、その個々のセルを編集したことがわかります。これにより、各編集状態を個別に処理できます!

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];


    int i = 0;
    //When editing loop through cells and hide status image so it doesn't block delete controls. Fade back in when done editing.
    for (customGuestCell *cell in self.tableView.visibleCells) 
    { 
        if (cell.isEditing) {
            i += 1;
        }
    }

    if (i > 1) 
    {
        for (customGuestCell *cell in self.tableView.visibleCells) 
        { 
            if (editing) 
            {
                // loop through the visible cells and animate their imageViews
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:0.4];
                cell.statusImg.alpha = 0;
                [UIView commitAnimations];
            } 
        }
    }
    else if (!editing) 
    {
        for (customGuestCell *cell in self.tableView.visibleCells) 
        { 
            [UIView beginAnimations:nil context:nil];
            [UIView setAnimationDuration:0.4];
            cell.statusImg.alpha = 1.0;
            [UIView commitAnimations];            
        }
    }
}
4

4 に答える 4

4

戦略が 1 つあります。現在はテストしていませんが、機能する可能性があります。

UITableView を編集モードに設定し、isEditing関数でテストできます。しかし、セルは同じisEditingです。したがって、1 つのセルのみが編集状態にあるか、すべての UITableView であるかを確認できます。

1 つのセルを編集状態に設定すると、UITableView がまったく編集状態に変化するかどうかを確認します。

于 2012-04-04T12:44:15.937 に答える
2

私が選んだ解決策は、編集ボタンのアクションをカスタム メソッド (editBtnTapped など) にオーバーライドすることでした。このメソッドでは、変数 editButtonPressed を設定し、編集ボタンのアクションをオーバーライドしたため、手動で setEditing:animated: を呼び出します。

ビューでDidLoad:

[self.navigationItem.rightBarButtonItem setAction:@selector(editBtnPressed)];

そして、新しいアクション メソッド:

- (IBAction) editBtnPressed
{
  if ([self isEditing]) 
  {
    self.editButtonPressed = NO;
    [self setEditing:NO animated:YES];
  }
  else  
  {
    self.editButtonPressed = YES;
    [self setEditing:YES animated:YES];
  }
}

setEditing:animated: editButtonPressed フラグをチェックして、[編集] ボタンが押されたのか、ユーザーが単純にスワイプしたのかを判断します。[編集] ボタンが原因でそこにいる場合は、セルを追加します。そうでなければ私はしません。

別の場所でフラグが必要になる場合があることに注意してください (例: numberOfRowsInSection)。

この代替手段が役立つことを願っています。

よろしく、

--ジョン

于 2012-06-17T03:13:12.053 に答える
1

これを行うために私が見つけた唯一の信頼できる方法は、プライベート フラグを維持し、inEditModeこのフラグを で切り替えることsetEditing:animatedです。次に、テーブルが編集モードかどうかを確認するのinEditModeではなく使用します。isEditing

于 2012-04-04T12:52:15.507 に答える