2012-03-17 1 views
0

私は、コードを次している - (ボイド)私はプログラム的に私UITextView内のテキストを選択したい、あるUITextviewで同時にキーボードを非表示にしてテキストをプログラムで選択する方法はありますか?

[txtView becomeFirstResponder]; 
[txtView setSelectedRange:NSMakeRange(0, 10)]; 

をのviewDidLoad。 同時に、キーボードを表示したくありません。 私は、次のコードを追加してみました -

[txtView setEditable:NO]; 

または

[txtView resignFirstResponder]; 

彼らはキーボードが隠れ作るものの、しかし、いずれの方法でも、テキストの選択を消します。

要約すると、プログラムでテキストを選択し、同時にキーボードを無効にしたいとします。 私は[txtView setEditable:NO]を持っているので、それは可能だと思います。私はまだテキストを選択するために画面に触れることができます。 質問は、プログラムですべてを行う方法がわかりません。 誰かが私を助けることができますか? -resignFirstResponder上のドキュメントから

+1

でこの、

書き込み、このコードを見て、私はあなたがHIGに違反することを希望する理由として求めることができますか? – CodaFi

答えて

1

サブクラスは、状態を更新したり、そのような選択をunhighlighting、またはNOを返すように、第一応答者の状態を放棄する を拒否するなどのいくつかの アクションを実行するために、このメソッドをオーバーライドすることができます。このメソッドをオーバーライドする場合は コード内のある時点でsuper(スーパークラス実装)を呼び出す必要があります。

あなたは、おそらくこのように、UITextViewをサブクラス化し、-resignFirstResponderメソッドをオーバーライドする必要があります:

- (BOOL)resignFirstResponder { 
    [self setEditable:NO]; 
    [self setSelectedRange:NSMakeRange(0, 10)]; 
    return YES; 

} 

理論的には、これは動作するはずですが、核心ザラザラresignFirstResponder内部はあまりそれを好きではないかもしれません。

0

これを行うには少し遅延があります。 viewDidLoad

[txtView becomeFirstResponder]; 
[txtView setSelectedRange:NSMakeRange(0, 10)]; 
[self performSelector:@selector(resignKeyBoard) withObject:nil afterDelay:.5]; 

-(void)resignKeyBoard 
{ 
    [txtView resignFirstResponder]; 
} 
+0

伊藤さん、ありがとうございます。でも、それは私が欲しいものではありません。選択はまだ遅れて消えてしまいます。 – Nohappy

+0

@Nohappyの場合、NSAttributedStringが必要です。UITextViewの内容を取得し、選択された部分のテキストは、選択を表示するために、いくつかの異なる色で変更する必要があります。 – Ishu