UITextView の context menu

UITextView の context menu で、いろいろ出てくるわけですが、Copy, Select All, Share ぐらいに絞って表示したいなぁと。簡単だと思ったら、結構ハマった。

まず、UITextView の sub class を新設。

contex menu は次の method で検知できる。

-(BOOL) canPerformAction:(SEL)action withSender:(id)sender

 

action のところの method を検知したら YES を返してやると menu が表示される。NO ならその item は表示されない。コピーを表示したいなら、こんな感じだ。

if ( action == @selector( copy:) )

 return YES;

select All なら、

action == @selector( selectAll: )

となる。で、Share はどうなんだと、action == @selector( share: ) と書いてもダメだ。

いろいろ調べたら、action == NSSelectorFromString( @"share:" ) だってよ・・・

share だけ違うとは思わなかった。

 

さらに、context menu は出したいけど、keyboard は出したくない。それはどうするんだと。UITextField の場合は結構情報があるけれども、UITextView については情報が少ない。

いろいろ試してみた結果、

_textView.selectable = YES;

_textView.editable = NO;

こうすることで、選択はできるけれども編集はできない(キーボードは出さない)ということになる。