2011-06-20 7 views
12

私は約1時間ウェブを検索していますが、これを手伝ってくれるコードは見つかりません。UITextViewは「完了」の最初のレスポンダーを辞任します

私はUITextViewを持っています。ユーザーがキーボードの「完了」ボタンを押したときに最初のレスポンダーを辞任する必要があります。

私はこのようなインターネットの周りに浮いコード見てきました:

-(BOOL) textFieldShouldReturn:(UITextField *)textField { 
[textField resignFirstResponder]; 
return NO; 
} 

をしかし、それはUITextViewのために動作しません。 簡単に言えば、 ユーザーがキーボードの終了ボタンを押したときにどうすればわかりますか?

答えて

44

shouldChangeTextInRange:デリゲートメソッドを実装します。

以下のアプローチを使用して、ソリューションは@ "\ n"(改行文字)のみで動作します。

//In you *.h file make sure you add 
@interface v1ViewController : UIViewController <UITextViewDelegate> 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    myTextField.delegate = self; 
} 

    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range 
      replacementText:(NSString *)text 
     { 

      if ([text isEqualToString:@"\n"]) { 

       [textView resignFirstResponder]; 
       // Return FALSE so that the final '\n' character doesn't get added 
       return NO; 
      } 
      // For any other character return TRUE so that the text gets added to the view 
      return YES; 
    } 
+0

私はそれを設定しました。それが押されたときにどうすれば検出できますか? –

+0

'myTextField.delegate = self;'のようなテキストフィールド代理人を設定し、 'textFieldShouldReturn'メソッドで' YES'を返します。 – Jhaliya

+2

@Jhaliya please OPを読む、テキストではありませんテキストフィールド –

-3

あなたはTextViewのための代理人としてあなたのコントローラを設定する必要があり、デリゲートメソッド

- (void)textViewDidEndEditing:(UITextView *)textView { 
    [textView resignFirstResponder]; 
} 

を使用することができます。 もっと多くの方法については、こちらをご覧ください:http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITextViewDelegate_Protocol/Reference/UITextViewDelegate.html%23//apple_ref/doc/uid/TP40006897

+0

私のアプリケーションでは何も起こっていませんでした。デリゲートをセットアップして、私が望むようにキーボードの設定をしていますが、そのコードは決して呼び出されません。 –

+2

'textViewDidEndEditing:'は、編集が終了したとき、つまりtextViewが最初のレスポンダーをすでに辞めているときに呼び出されます。 'textView resignFirstResponder;'の内部では効果がありません。 – nacho4d

+0

あなたはそうです。私は再びドキュメントを読む必要があります – Pierre

関連する問題