1

このカスタムコントロールをプロジェクトに実装しました。Githubページこのコントロールは、スワイプのようなメールボックスを追加して、使用したい機能を削除/完了します。

これを使用するときに遭遇した唯一の問題は、ストーリーボードを介してセルにUITextFieldを追加する場合です。1つ追加すると、セルはジェスチャの認識を停止し、UITextFieldとの対話のみを許可します。

誰かがこの問題の解決策を持っていますか?

編集:これがTableViewCellの初期化メソッドです。ごめん。

- (void)initializer
{
    _mode = MCSwipeTableViewCellModeSwitch;

    _colorIndicatorView = [[UIView alloc] initWithFrame:self.bounds];
    [_colorIndicatorView setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth];
    [_colorIndicatorView setBackgroundColor:[UIColor clearColor]];
    [self insertSubview:_colorIndicatorView belowSubview:self.contentView];

    _slidingImageView = [[UIImageView alloc] init];
    [_slidingImageView setContentMode:UIViewContentModeCenter];
    [_colorIndicatorView addSubview:_slidingImageView];

    _panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGestureRecognizer:)];
    [self addGestureRecognizer:_panGestureRecognizer];
    [_panGestureRecognizer setDelegate:self];
}

ジェスチャーの処理方法

- (void)handlePanGestureRecognizer:(UIPanGestureRecognizer *)gesture
{
    UIGestureRecognizerState state          = [gesture state];
    CGPoint translation                     = [gesture translationInView:self];
    CGPoint velocity                        = [gesture velocityInView:self];
    CGFloat percentage                      = [self percentageWithOffset:CGRectGetMinX(self.contentView.frame) relativeToWidth:CGRectGetWidth(self.bounds)];
    NSTimeInterval animationDuration        = [self animationDurationWithVelocity:velocity];
    _direction = [self directionWithPercentage:percentage];

    if (state == UIGestureRecognizerStateBegan)
    {
    }
    else if (state == UIGestureRecognizerStateBegan || state == UIGestureRecognizerStateChanged)
    {
        CGPoint center = {self.contentView.center.x + translation.x, self.contentView.center.y};
        [self.contentView setCenter:center];
        [self animateWithOffset:CGRectGetMinX(self.contentView.frame)];
        [gesture setTranslation:CGPointZero inView:self];
    }
    else if (state == UIGestureRecognizerStateEnded || state == UIGestureRecognizerStateCancelled)
    {
        _currentImageName = [self imageNameWithPercentage:percentage];
        _currentPercentage = percentage;
        MCSwipeTableViewCellState state = [self stateWithPercentage:percentage];

        if (_mode == MCSwipeTableViewCellModeExit && _direction != MCSwipeTableViewCellDirectionCenter && [self validateState:state])
            [self moveWithDuration:animationDuration andDirection:_direction];
        else
            [self bounceToOriginWithDirection:_direction];
    }
}
4

1 に答える 1

0

この問題を解決する方法を考え出しました。プロジェクトに UITextField サブクラスを追加し、UITextfield ヘッダーをカスタム UITableViewCell にインポートしました。に を追加<UITextFieldDelegate>@interfaceます。クラスに追加@property (nonatomic, strong, readonly) ItemLabel *label; // ItemLabel being the UITextField classし、UITableViewCell実装で合成します。

次に、このコードをカスタム イニシャライザに追加するか、カスタム イニシャライザがない場合はデフォルトのコードを追加します。

_label = [[TehdaLabel alloc] initWithFrame:CGRectNull];
_label.textColor = [UIColor blackColor];
_label.font = [UIFont boldSystemFontOfSize:14];
_label.backgroundColor = [UIColor clearColor];
_label.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
_label.returnKeyType = UIReturnKeyDone;
_label.delegate = self;
[self addSubview:_label];

次に、UITextField のデリゲート メソッドを追加して、楽しみましょう。セルのサブビューではないため、UITextField が干渉しているようです。

于 2013-03-14T20:35:59.143 に答える