応答者チェーンに関する問題

1782 ワード

シーン:
開発中のイベントの伝達(応答者チェーン)に関する問題は避けられない.本文は著者が開発中に出会った問題と解決策の集合であり、読者一人一人に役立つことを望んでいる.1、MVCアーキテクチャモードを使用する中で、viewとcontrollerを分離することは避けられない.そこで、ビューでコントローラを探す操作を避けられない.
//   view    viewController
- (UIViewController*)viewController{
    for (UIView* next = [self superview]; next; next = next.superview) {
        UIResponder* nextResponder = [next nextResponder];
        if ([nextResponder isKindOfClass:[UIViewController class]]) {
            return (UIViewController*)nextResponder;
        }
    }
    return nil;
}

2、ScrollViewでtouchBeginメソッドを使用するのは、UIDIewのTouchメソッドがScrollViewによってブロックされているためであり、その解決策は以下の通りである:UIscrollViewのサブクラスを作成してサブクラスにメソッドを書き換え、イベントの下向き伝達を保証する.余計なことは言わないでコードを見て
  #import 

  @interface UIScrollView (HAScrollView)
    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
  @end

実装方法
#import "UIScrollView+HAScrollView.h"

@implementation UIScrollView (HAScrollView)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self nextResponder] touchesBegan:touches withEvent:event];
    [super touchesBegan:touches withEvent:event];
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self nextResponder] touchesMoved:touches withEvent:event];
    [super touchesMoved:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self nextResponder] touchesEnded:touches withEvent:event];
    [super touchesEnded:touches withEvent:event];
}

入力ボックスで手書き入力操作を行うとフラッシュバックの問題が発生します.その原因は上記の問題(原因が見つからない)で、jiejueで