0

私はiOSアプリケーションを開発していて、カスタムを使用して独自のカスタムUITableView編集モードを実装しようとしていますUITableViewCell

私は編集ボタンを持っています、そしてこれはそれのためのIBActionです:

- (IBAction)editFavList:(id)sender
{
    if ([_favList isEditing])
    {
        [_favList setEditing:NO animated:YES];
        [_editButton setTitle:@"Edit" forState:UIControlStateNormal];
    }
    else
    {
        [_favList setEditing:YES animated:YES];
        [_editButton setTitle:@"Done" forState:UIControlStateNormal];
    }
}

接続UITableView* _favList delegateしましたが、編集ボタンをタップするまでUIViewController、このUITableViewDelegate方法は正常に機能します。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView.editing)
    {
        NSNumber* obj = [favsSelected objectAtIndex:indexPath.row];
        BOOL selected;

        if (obj == nil)
            selected = NO;
        else
            selected = [obj boolValue];

        FavouriteCell* cell =
            (FavouriteCell*)[tableView cellForRowAtIndexPath:indexPath];

        cell.checked = !selected;

        // Actualizo el estado en el vector de los favoritos seleccionados
        [favsSelected insertObject:[NSNumber numberWithBool:!selected] atIndex:indexPath.row];
    }
}

編集ボタンをタップした後、このメソッドは起動しません(メソッドにブレークポイントを追加するので、それについては確信しています)。

これはカスタムセルの実装です。

#import "FavouriteCell.h"

const NSInteger EDITING_HORIZONTAL_OFFSET = 35;

@implementation FavouriteCell

@synthesize selectIcon = _selectIcon;
@synthesize favName = _favName;
@synthesize checked = _checked;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        self.checked = NO;
    }
    return self;
}

- (void)setChecked:(BOOL)checked
{
    if (checked == _checked)
        return;

    _selectIcon.highlighted = checked;
    _checked = checked;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

+ (NSString *)reuseIdentifier
{
    return @"favouriteCell";
}

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    //self.editing = editing;

    [super setNeedsLayout];
}

#pragma mark - Private methods
- (void)layoutSubviews
{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationBeginsFromCurrentState:YES];

    [super layoutSubviews];

    if (((UITableView *)self.superview).isEditing)
    {
        CGRect contentFrame = self.contentView.frame;
        contentFrame.origin.x = EDITING_HORIZONTAL_OFFSET;
        self.contentView.frame = contentFrame;
        self.accessoryType = UITableViewCellAccessoryNone;
    }
    else
    {
        CGRect contentFrame = self.contentView.frame;
        contentFrame.origin.x = 0;
        self.contentView.frame = contentFrame;
        self.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }

    [UIView commitAnimations];
}
@end

ただし、編集ボタンをもう一度タップすると(その後、編集モードを終了します)、行をタップすると、didSelectRowAtIndexPath再度トリガーされます。

なぜ私は間違っているのですか?おそらく、この問題はUITableView、が編集モードであるかどうかに関連しています。

4

2 に答える 2

1

allowsSelectionDuringEditingUITableView のプロパティを次のように設定する必要があります。YES

あなたの場合:

_favList.allowSelectionDuringEditing = YES;
于 2013-02-15T10:21:12.697 に答える
1

nib ファイルをチェックしてください。tableVieweditingプロパティを に変更する必要がありますSingle Selection during editing

ここに画像の説明を入力

于 2013-02-15T10:22:24.087 に答える