1

テーブルのUITableViewCell内にUITextViewがあります。UITextViewの「編集可能」がオフになっているため、dataDetectorTypesをUIDataDetectorTypeAllに設定できます。これは、まさに私が望むものです。アプリは、ユーザーがUITextViewのリンクに触れたことを検出し、適切な処理を実行するようになりました。

この問題は、ユーザーがリンクのないUITextViewの一部に触れたときに発生します。UITableViewデリゲートのdidSelectRowAtIndexPathを呼び出したい。ただし、リンクが検出されない場合でも、UITextViewがタッチをトラップしているため、そうではありません。

私の最初の推測は、UITextViewのuserInteractionEnabledをNOに変更することでした。これは、didSelectRowAtIndexPathが呼び出されるが、UITextViewがリンクを検出できないことを意味します。それはキャッチ22です。

これを修正する方法について何かアイデアはありますか?

助けてくれてありがとう。

4

2 に答える 2

1

タッチアップをレスポンダーチェーンに渡してみるのもいいかもしれません。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
   [super touchesBegan:touches withEvent:event];
}
于 2012-07-05T17:40:17.400 に答える
0

4 つすべてのタッチ ハンドラーをオーバーライドUIResponderして、テキスト ビューのスーパービューに転送します。

ヘッダー ファイルには、「一般に、カスタム タッチ処理を行うすべてのレスポンダは、これら 4 つのメソッドすべてをオーバーライドする必要があります。アプリケーションで正しい動作を保証するために、キャンセルされたタッチを処理する必要があります。これを怠ると、不正な動作につながる可能性が非常に高くなります。クラッシュします。」

class MyTextView: UITextView {

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.superview?.touchesBegan(touches, withEvent: event)
    }

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.superview?.touchesMoved(touches, withEvent: event)
    }

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.superview?.touchesEnded(touches, withEvent: event)
    }

    override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
        self.superview?.touchesCancelled(touches, withEvent: event)
    }

}
于 2015-10-14T19:35:21.800 に答える