0

私は2つのtextFields、countryCodeTextFieldとcellphoneTextFieldを並べています

countryCodeTextFieldについて。countryCodeTextFieldで発生するアクションselectCountryがEdit Did Beginあります


- (IBAction)selectCountry:(id)sender {
    countryCodeTextField.delegate = self;
    [countryCodeTextField resignFirstResponder];

  • 自己実装することに注意してください<UITextFieldDelegate>

問題は、ユーザーが携帯電話をクリックしたときに、countryCodeTextFieldをクリックするとキーボードが表示され、キーボードが閉じられないことです。

人が最初にcountryCodeをクリックすると、キーボードは表示されません(これが私が望むものです)。

ユーザーが最初にcellphoneTextFieldをクリックし、次にcountryCodeTextFieldをクリックしたときに、キーボードが非表示にならないのはなぜですか?

4

3 に答える 3

1

ユーザーが特定の UITextField を編集できないようにするには、無効に設定します。

 UITextField *textField = ... // Allocated somehow
 textfield.enabled = NO

または、Interface Builder で有効なチェックボックスをオンにします。その後、テキストフィールドは引き続き存在し、テキストを構成することで更新できます。しかし、コメントで言及されているように、ユーザーは UITextFields が編集可能であることを期待しています。

また、なぜ IBAction コールバックでデリゲートを設定しているのですか? これは、Interface Builder で行うか、コードで UITextField を作成するときに行う方がよいと思います。

編集:

わかりました-ユーザーがボックスを選択できるようにしたいのですが、カスタムサブビューを表示して、そこからボックスを満たすものを選択します。

そのため、作成時に UITextField デリゲートを設定し (上記のように)、UITextFieldDelegate プロトコルから以下を実装します。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
     return NO;
}

NOを返す。両方の UITextField に同じデリゲートを使用している場合は、このメソッドがもう一方のフィールドに対して YES を返すようにする必要があることに注意してください。たとえば、次のようなものです。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
   if (textField == countryTextField)  
       return NO;
   return YES;
}

うまくいけば、これでキーボードが表示されなくなるはずです。そして、独自のサブビューを起動する方法を考え出す必要があります。これは、IBAction (タッチアップなど) を介して実行することをお勧めします。ここでさまざまなことをテストする必要がありますが、UITextField のポイントを少し破損していることを覚えておいてください。動作する場合と動作しない場合があり、次の iOS アップグレードで壊れる場合があります。

于 2012-07-11T23:22:45.680 に答える
0

あなたの方法で:

- (IBAction)textFieldDidBeginEditing: (UITextField *)textField

これを呼び出します:[textFieldbecomeFirstResponder];

そして、2つのフィールドにチェックを適用します。つまり、textFieldがcountryCodeTextFieldの場合、次のように記述します。

[textField resignFirstResponder];

そしてあなたのメソッドを呼び出します:

[self selectCountry];

このメソッドでは、国コードのリストを表示します。

したがって、コードは次のようになります。

 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    return YES;
}
 - (IBAction)textFieldDidBeginEditing: (UITextField *)textField{

    [textField becomeFirstResponder];

    if (textField == countryCodeTextField){

    [textField resignFirstResponder];
    [self selectCountry];
    }
}

-(IBAction)selectCountry{
    //display the list no need to do anything with the textfield.Only set text of TextField as the selected countrycode.
}
于 2012-07-12T04:27:20.897 に答える
0

まず、UITextField を使用すべきではないと思います。UIButton を使用し、現在の値をボタンのタイトルとして表示する必要があると思います。ただし、あなたがそれに心を向けている場合は、私たちの親友inputViewである のプロパティを使用しUITextField、それをカスタム入力ビューに設定します (これは UIPickerView などであると想定しています)。

これには、盲目や視覚障害のあるユーザーにとってアプリをひどく壊さないという追加のボーナスがあります。これは、標準的な動作をいじる前に、おそらく知っておくべきことです.

于 2012-07-12T04:08:55.797 に答える