1

私は現在、この構造のアプリに取り組んでいます:

MainViewControllerと呼ばれるViewControllerがあり、アプリケーションのすべてのタッチイベントを処理します。MainViewControllerには、インスタンス変数として、canvasViewと呼ばれるビューがあります。canvasViewには、hiddenTextViewと呼ばれるUITextViewがあります。

他にも見えないビューなどがあるので、UITextViewが最初にタッチを登録するわけではありません。

UITextViewにこの構成でタッチを登録させるにはどうすればよいですか?具体的には、autoCorectionボックスから選択します(実際には日本の漢字選択用ですが、同様のメカニズムを想定しています)。

私はもう試した:

[canvasView.hiddenTextView touchesBegan:touches withEvent:event]

MainViewControllerのtouchesbeganメソッドから。touchesBegan、moved、およびEndedに対してこれを実行しました。

私が試した50回ほどの実行のうちの1回で実際に機能したと思いますが、何が変わったのかわかりません。

これを機能させる方法について何かアイデアはありますか?

4

1 に答える 1

0
[canvasView.hiddenTextView becomeFirstResponder];

おそらくあなたが望むことをします。

iPhone のレスポンダー チェーンは、少しトリッキーです。通常は、コントロールのオーバーラップを避ける方が簡単なので、特定のインスタンスで、どのコントロールがどのタッチからの入力を受け取るかが完全に明確になります。

多くのコントロールをオーバーラップさせ、どのコントロールを非表示にするか表示するかを頻繁に切り替える場合は、 のサブクラスをさらに実装UIViewControllerし、コントロールを入れ替えるのではなく、それらの間で切り替えることをお勧めします。別のオプションは、のカスタム サブクラスを作成UIViewし、代わりにそれらを交換することです。つまり、古いものをサブビューから実際に削除し (非表示にするのではなく)、新しいものを追加します。

もちろん、サブクラス化よりも非表示/表示の方がはるかに簡単な場合もあります。

それが役立つことを願っています。参照: Apple のUIResponderドキュメント. UIViewController( anyまたはUIViewは のサブクラスであることに注意してくださいUIResponder。)

于 2009-08-11T09:02:31.113 に答える