2011-06-05 4 views
0

こんにちは、私は無効2 UIButtonsを保つために、次のコードを使用していたデータは、4 UITextFieldtextFieldDidEndEditing代替

- (void)textFieldDidBeginEditing:(UITextField *)textField { 


if (([brand.text length] >0) && ([qty.text length] >0) && ([size.text length] >0) && ([price.text length] >0)) { 
    [calcOneButton setEnabled:YES]; 
    [calcTwoButton setEnabled:YES]; 

} 
if (([brand.text length] ==0) || ([qty.text length] ==0) || ([size.text length] ==0) || ([price.text length] ==0)){ 

    [calcOneButton setEnabled:NO]; 
    [calcTwoButton setEnabled:NO]; 
} 

} 

- (void)textFieldDidEndEditing:(UITextField *)textField { 

int ebtl = [brand.text length]; 
int eqtl = [qty.text length]; 
int estl = [size.text length]; 
int eptl = [price.text length]; 
NSLog(@"ebtl = %d eqtl = %d estl = %d eptl = %d",ebtl, eqtl, estl, eptl); 

if (([brand.text length] ==0) || ([qty.text length] ==0) || ([size.text length] ==0) || ([price.text length] ==0)){ 
    [calcOneButton setEnabled:NO]; 
    [calcTwoButton setEnabled:NO]; 
} 
if (([brand.text length] >0) && ([qty.text length] >0) && ([size.text length] >0) && ([price.text length] >0)) { 
    [calcOneButton setEnabled:YES]; 
    [calcTwoButton setEnabled:YES]; 
} 

}

であるまで私の問題はtextFieldDidEndEditingは、ユーザータップするまで呼び出されないということですtextFieldから離れています。これは、画面をタップする必要が作成され、ボタンは、これを回避する方法があるので、ボタンはすぐに有効になりますか?

答えて

2

ボタンは、ユーザーがtextFieldをタップしたときにのみアクティブになります。ポップアップする通常のキーボードを使用している場合は、キーボードのDONEボタンを使用してキーボードを取り除き、キーボードが消えるとIBActionを書き込んだ後、ボタンを有効にします。

- (BOOL) textFieldShouldReturn:(UITextField *)textField 
{ 
[textField resignFirstResponder]; //enable your buttons after this 
return 1; 
} 

またはIBAction使用:

-(IBAction) textFieldFinishedDone: (id) sender; // enable your buttons after this 

ボタンはすべてテキストフィールドを右満たされている場合にのみアクティブ取得する必要がありますか?あなたはこれを行うことができます。 上記の両方の機能をコメントアウトしてください。 IBActionを使用し、DONEを押してキーボードを辞めるときは、すべてのtextFieldのステータスをチェックしてください。 if-elseブロックを使用して、すべてのtextFieldが完了したときにボタンを表示させます。

+0

私はフィールドのいずれかに通常のキーボードを使用している、他の3つは、すべての数字キーパッドです。 フィールドのイベントプロパティで編集変更または値の変更にアクションをリンクできますか? – sjbuchanan007

+0

このチュートリアルを使用して、数字キーパッドのリターンキーを作成します。 http://www.neoos.ch/news/46-development/54-uikeyboardtypenumberpad-and-the-missing-return-key – Legolas

+0

申し訳ありませんが、私はあなたの質問を正しく読んでいませんでした。すべてのtextFieldsが完了したら、ボタンをアクティブにする必要がありますか? – Legolas

0

最高のユーザーエクスペリエンスを得るには、textField:shouldChangeCharactersInRange:replacementString:の動作を常にYESに戻すことをおすすめします。

はまた、上記の方法のロジックは、 好ましい実施冗長である:

- (void)textFieldDidBeginEditing:(UITextField *)textField { 

    if (([brand.text length] >0) && 
     ([qty.text length] >0) && 
     ([size.text length] >0) && 
     ([price.text length] >0)) { 
    [calcOneButton setEnabled:YES]; 
    [calcTwoButton setEnabled:YES]; 
    } else { 
    [calcOneButton setEnabled:NO]; 
    [calcTwoButton setEnabled:NO]; 
    } 

} 
+0

お返事ありがとうございます、私はすでに 'textField:shouldChangeCharactersInRange:replacementString:'の下で多くのことを行っていますので、変更されたイベントを編集しているイベントを使ってアクションにリンクしました。 – sjbuchanan007