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