2012-04-24 10 views
0

フィールドにテキストを入力したときに呼び出されるIBActionがあります。次に、入力を検証します。エラーがあると判断した場合は、メッセージを表示して、同じフィールドに再度入力する必要があります。キーボードを持ち上げるためにテキストフィールドを選択させるのではなく、キーボードを表示させたままにします。キーボードを強制的に表示したままにすることはできますか?

私はIBActionの最後のステートメントとして[SymbolEntered becomeFirstResponder];を行っていますが、キーボードはまだ消えています。私はそれを間違った場所に置いていますか?どんな助けもありがとう。ありがとう。

- (IBAction)textFieldDoneEditing:(id)sender { 

    DebugMsg.text = nil; 
    DebugMsg2.text = nil; 
    DebugMsg3.text = nil; 

    NSLog (@"done editing"); 
    NSLog (@"%@", SymbolEntered.text); 

    if ([SymbolEntered.text isEqualToString:nil]) 
    { 
     Result.textColor = [UIColor redColor]; 
     Result.text = @"You must enter a symbol!"; 
     [SymbolEntered becomeFirstResponder]; 
    } 
    else 
    { 
     if ([SymbolEntered.text isEqualToString: 
      [NSString stringWithCString:elements_table2[el_tbl_idx-1].element_symbol]]) 
     { 
      correct_count++; 
      Result.textColor = [UIColor greenColor]; 
      Result.text = @"Correct!"; 
      Score.hidden = FALSE; 
      Score.text = [NSString stringWithFormat:@"Score: %d out of %d - %d Percent", correct_count, el_count+1, 
             (correct_count*100)/(el_count+1)]; 
      GetNextElementButton.hidden = FALSE; 
      SymbolEntered.enabled = FALSE; 
      el_count++; 
      attempts = max_tries + 1; 
     } 
     else 
     { 
      Score.hidden = TRUE; 
      Result.textColor = [UIColor redColor]; 
      if (attempts < max_tries) 
      { 
       if (attempts+1 == max_tries) 
       { 
        Result.text = @"Sorry, one more try -"; 
       } 
       else 
       {  
        Result.text = @"Sorry, try again - "; 
       } 
       GetNextElementButton.hidden = TRUE; 
       attempts++; 
      } 
      else 
      {  
       Result.text = [[NSString alloc] initWithFormat: @"Sorry. The correct answer is %@", 
        [NSString stringWithCString:elements_table2[el_tbl_idx-1].element_symbol]]; 
       Score.hidden = FALSE; 
       Score.text = [NSString stringWithFormat:@"Score: %d out of %d - %d Percent", correct_count, el_count+1,      (correct_count*100)/(el_count+1)]; 
       GetNextElementButton.hidden = FALSE; 
       SymbolEntered.enabled = FALSE; 
       el_count++; 
      } 
     } 
    } 

    [SymbolEntered becomeFirstResponder];   

    NSLog (@"end of textfieldoneediting"); 
} 
+0

ソースコードのどこでも 'resignFirstResponder'が呼び出されていますか? – Espresso

+0

このIBActionではなく、キーボードが表示されているときにバックグラウンドタップのIBActionで呼び出されます。 – Rick

答えて

2

代わりに、UITextFieldのtextFieldShouldEndEditing:delegateメソッドで検証を行うことができます。そのコールバックからNOを返すと、テキストフィールドは最初のレスポンダのままになり、キーボードは消えません。 (あなたはそれが当然のことながら、まだ存在しない場合は、あなたのコントローラは、テキストフィールドのデリゲートオブジェクトにする必要があります。)

+0

+1絶対に行く方法 – lnafziger

+0

素晴らしいですが、私はこれで初心者であることを認めなければなりません。私はデリゲートビジネスを理解していません。これを行う方法や、それを説明するドキュメントに私を送ってくれる方法についてもう少し詳しく述べてください。ありがとうございました。応答が遅れて申し訳ありませんが、今までこれまでには戻れませんでした。提案していただきありがとうございます。 – Rick

+0

私はそれを働かせました。ご協力いただきありがとうございます。 – Rick

0

[textField becomeFirstResponder]を後で呼び出すことを試みますか?また、UITextFieldポインタがnilか何かでないことを確認してください。詳細については、コードの一部を表示してください。問題がどこにあるかは分かりにくいです。

+0

私は最後のステートメントとしてbecomeFirstResponderを呼び出しています。このサイトで適切にフォーマットされるようにコードを表示するにはどうすればよいですか? – Rick

+0

コードは上記にする必要があります。私は願います。 – Rick

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

それはキーボードを辞任します。このお試しください。

関連する問題