2012-04-24 81 views
0

我有一個IBAction,當有人在字段中輸入文本時被調用。然後我驗證輸入。如果我確定有錯誤,我會顯示一條消息,並希望用戶再次進入同一字段。而不是讓他們選擇文本字段來使鍵盤(這工作正常),我想只留下鍵盤顯示。如何強制鍵盤保持顯示?

我在做[SymbolEntered becomeFirstResponder];作爲我的IBAction中的最後一個聲明,但鍵盤仍然消失。我把它放在錯誤的地方?任何幫助,將不勝感激。謝謝。

- (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 2012-04-25 00:07:29

+0

不在此IBAction中,但在顯示鍵盤時,它在IBAction中被調用以獲得背景抽頭。 – Rick 2012-04-25 00:46:12

回答

2

您可以在UITextField textFieldShouldEndEditing:delegate方法中進行驗證。如果您從該回撥中返回NO,則文本字段將保持第一響應者的身份,並且鍵盤不會消失。 (當然,如果還沒有,則必須使控制器對象成爲文本字段的代表)。

+0

+1絕對要走的路 – lnafziger 2012-04-25 04:24:13

+0

聽起來不錯,但我不得不承認我是這個新手。我不明白委託業務。你可以補充一點關於如何做到這一點,或者給我發送一些解釋它的文檔?謝謝,對於延遲迴復感到抱歉,但直到現在我纔回到這個位置。感謝您的建議。 – Rick 2012-06-14 01:27:38

+0

我得到它的工作。謝謝你的幫助。 – Rick 2012-06-16 02:52:15

0

請嘗試稍後調用[textField becomeFirstResponder]?還要確保UITextField指針不爲零或某物。如需更多幫助,請顯示一些代碼,很難分辨問題出在哪裏。

+0

我打電話給becomeFirstResponder作爲最後一個聲明。如何顯示代碼,以便在本網站上正確格式化? – Rick 2012-04-24 23:28:12

+0

代碼應該在上面。我希望。 – Rick 2012-04-24 23:49:44

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

試試這將退出鍵盤。