UITextViewにUITapGestureRecognizer
を追加しても、normalとしてUITextView
にアクセスするにはどうすればよいですか?
現在、textViewにカスタムジェスチャを追加するとすぐに、カーソルの配置などのUITextViewのデフォルトアクションのタップがブロックされます。
var tapTerm:UITapGestureRecognizer = UITapGestureRecognizer()
override func viewDidLoad() {
tapTerm = UITapGestureRecognizer(target: self, action: "tapTextView:")
textView.addGestureRecognizer(tapTerm)
}
func tapTextView(sender:UITapGestureRecognizer) {
println("tapped term – but blocking the tap for textView :-/")
…
}
タップを処理しながら、カーソル位置などのtextViewの動作をそのまま維持するにはどうすればよいですか?
これを行うには、View ControllerにUIGestureRecognizerDelegateを採用させ、オーバーライドは次のようなジェスチャ認識メソッドと同時に認識される必要があります。
override func viewDidLoad() {
tapTerm = UITapGestureRecognizer(target: self, action: "tapTextView:")
tapTerm.delegate = self
textView.addGestureRecognizer(tapTerm)
}
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
誰かがObjectiveCで@ZellB。の答えを探してここに来た場合、コードは次のとおりです。
- (void)viewDidLoad {
[super viewDidLoad];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(textViewTapped:)];
tap.delegate = self;
tap.numberOfTapsRequired = 1;
[self.textView addGestureRecognizer:tap];
}
- (void)textViewTapped:(UITapGestureRecognizer *)tap {
//DO SOMTHING
}
#pragma mark - Gesture recognizer delegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
PS:<UIGestureRecognizerDelegate>を忘れないでください
Swift 4.2
次の手順では、UITextViewのコンテンツをスクロールしながら、タップするだけでフルスクリーンのUITextViewをエスケープできます。
class CustomTextView: UITextView {
var sender: DocViewController?
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
if let controller = sender {
controller.handleSwipeGesture()
}
}
}
UITextViewのコンテンツをスクロールするか、単にタップして終了することができます。
「送信者」は、作成時にホスティングUIViewControllerから設定されます。