2009-07-30 13 views
1

広告を含むビューのすぐ下にUITextViewを配置し、テキストを貼り付けようとすると貼り付けメニューが挿入ポイントのすぐ上にある広告をオーバーレイします。私は偶発的なクリックを奨励したくないので、私はメニューを上にではなく挿入ポイントの下に表示する方法を探しています。または、すでにテキストビューが画面の上部にあると思ってメニューコントローラを操作する方法があります。iPhone SDKのUITextViewに貼り付けメニューの配置を制御する方法

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

私は、View ControllerのtextViewDidBeginEditingに、次の行のバリエーションを追加しようとしました:textViewとviewDidLoadメソッドは不運です。

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

答えて

2

短い答えはできません。時には、非常に信頼できるものではありません。問題は、「UITextViewはかなり特殊なケースであり、タッチを扱うためにサブクラス化することはiPhone OS 3.0では実際には不可能です」*

UIWindowをサブクラス化してsendEventメソッドをオーバーライドする方法ですメニューのターゲット矩形を設定し、メニューを表示します。

 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の将来のバージョンでこれを変えるだろう。

関連する問題