1

UITableViewCell をサブクラス化して、テーブル ビューのカスタム レイアウトとアニメーションを作成しました。基本的に、左にスワイプすると編集モードに入り、右にスワイプすると編集モードを終了します。それぞれに適切なアニメーションが表示されます。

スワイプは期待どおりに機能していますが、テーブル ビューがスクロールしたり、別のセルが編集状態になったりするたびに、セルを非編集状態に設定する方法がわかりません。

アイデアは、テーブルビューがスクロールするか、ユーザーが別のセルで編集を開始する (左にスワイプする) たびに、セルを「通常の」状態にリセットすることです。

これが私のカスタム UITableViewCell クラスです:

//
//  CustomTableViewCell.m
//
//  Created by Spencer Müller Diniz on 27/03/13.
//  Copyright (c) 2013 Family. All rights reserved.
//

#import "CustomTableViewCell.h"

@implementation CustomTableViewCell

@synthesize customView;


- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

    if (self) {
        CGRect customFrame = CGRectMake(0.0f, 0.0f, self.contentView.bounds.size.width, self.contentView.bounds.size.height);

        self.customView = [[CustomTableViewCellView alloc] initWithFrame:customFrame];
        [self.contentView addSubview:self.customView];

        UISwipeGestureRecognizer* sgrLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(cellSwipedLeft:)];
        [sgrLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
        [self addGestureRecognizer:sgrLeft];

        UISwipeGestureRecognizer* sgrRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(cellSwipedRight:)];
        [sgrRight setDirection:UISwipeGestureRecognizerDirectionRight];
        [self addGestureRecognizer:sgrRight];
    }

    return self;
}

- (void)cellSwipedLeft:(UIGestureRecognizer *)gestureRecognizer {
    if (!self.isEditing)
        [self setEditing:YES animated:YES];
}

- (void)cellSwipedRight:(UIGestureRecognizer *)gestureRecognizer {
    if (self.isEditing)
        [self setEditing:NO animated:YES];
}

- (void)layoutSubviews {
    if (self.isEditing) {
        [UIView animateWithDuration:0.5f animations:^{
            self.customView.forgroundView.frame = CGRectMake(-100.0f, 0.0f, self.customView.forgroundView.frame.size.width, self.customView.forgroundView.frame.size.height);
        }];

    }
    else {
        [UIView animateWithDuration:0.5f animations:^{
            self.customView.forgroundView.frame = CGRectMake(0.0f, 0.0f, self.customView.forgroundView.frame.size.width, self.customView.forgroundView.frame.size.height);
        }];
    }
}

@end
4

0 に答える 0