1

広告を含むビューのすぐ下に UITextView を配置しました。ユーザーがテキストを貼り付けようとすると、貼り付けメニューが挿入ポイントのすぐ上にある広告をオーバーレイします。偶発的なクリックを助長したくないので、メニューを挿入ポイントの上ではなく下に表示する方法を探しています。または、メニュー コントローラーをだまして、テキスト ビューが既に画面の一番上にあると認識させる方法があるかもしれません。

sharedMenuController で setTargetRect:inView: メソッドを使用してみましたが、効果がありません。どうやら、テキスト ビューは共有メニュー コントローラーを使用していないようです。

ビューコントローラーの textViewDidBeginEditing:textView および viewDidLoad メソッドに次の行のバリエーションを追加しようとしましたが、うまくいきませんでした。

[[UIMenuController sharedMenuController] setTargetRect: CGRectMake(140, 120, 5, 5) inView:self.view];

4

1 に答える 1

2

簡単に言えば、これはできません。時々できますが、あまり確実ではありません。問題は、「UITextView はかなり特殊なケースであり、iPhone OS 3.0 では、タッチを処理する目的でそれをサブクラス化することは実際には不可能です。」 *

これを回避するには、UIWindow をサブクラス化し、その sendEvent メソッドをオーバーライドして、メニューのターゲット rect を設定し、メニューを表示します。

        UIMenuController *menu = [UIMenuController sharedMenuController]; 
        CGRect selectionRect = CGRectMake(0, 0, 270, 100); 
        [theMenu setTargetRect:selectionRect inView:theTextView.superview]; 
        [menu setMenuVisible:YES animated:YES];

ただし、編集メニューを表示するには 4 つの方法があり、これはメニューがタッチ イベントによって直接トリガーされる場合にのみ機能します。それ以外の場合、メニューは別の UI 要素に触れた結果として間接的に作成されます (メニュー項目を選択またはコピーする、または青い選択ドットに触れるなど)。

メニューの位置を確実に制御することはできないため、非表示と表示の通知をリッスンし、広告ビューのユーザー インタラクションを切り替えることにしました。しかし、setMenuVisible を実行した結果としてメニューが表示された場合にのみこれらの通知がトリガーされるため、これも機能しません。

ユーザーが UITextView を押したままにすると、丸い虫眼鏡が表示されます。タッチが終わるとメニューが表示されます。これらのメニューとその子については、私が知る限り、targetRect を設定したり、それらから通知を受け取ったりすることは不可能です。あきらめる。

Appleに機能強化のリクエストを提出しました。OSの将来のバージョンでこれが変更されることを願っています。

  • 参考:https ://devforums.apple.com/message/83743#83743 ※
于 2009-08-26T01:19:26.790 に答える