UITextfield и UIPickerView - PullRequest
       4

UITextfield и UIPickerView

0 голосов
/ 26 августа 2011

На мой взгляд, у меня есть 4 текстовых поля, я перетащил его из Xib,

поэтому, когда я нажимаю на первые три текстовых поля, я хочу открыть клавиатуру, а когда я щелкаю только по 4-му текстовому полю, я хочу открыть UIPickerView

Ниже я написал код, который открывает UIPickerView для всех текстовых полей.

- (void)textFieldDidBeginEditing:(UITextField *)textField{
    [textField resignFirstResponder];
    [self uiPickerPopUpDisplay];
}

Итак, друзья, пожалуйста, помогите мне, как мне это сделать ..

Спасибо и наилучшие пожелания Ранджит

Ответы [ 6 ]

5 голосов
/ 26 августа 2011

Используйте textFieldShouldBeginEditing: вместо textFieldDidBeginEditing: метода. Скажите, что ваши текстовые поля имеют имена textField1, textField2, textField3, textField4. Затем в textFieldShouldBeginEditing: метод.

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {

    if (textField == textField4) {

        [self uiPickerPopUpDisplay];
        return NO;
    } 

    return YES;
}
4 голосов
/ 26 августа 2011

Вы должны дать IBOutlet для всех четырех текстовых полей и установить делегата.

- (void)textFieldDidBeginEditing:(UITextField *)textField{
    if(textField == textBox4) {

        [textField resignFirstResponder];
        [self uiPickerPopUpDisplay];
    }
}
3 голосов
/ 26 августа 2011

Вы должны проверить, какое текстовое поле находится в этом методе.

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

    if( textField == theFourthTextField ) {
        [textField resignFirstResponder];
        [self uiPickerPopUpDisplay];
    }
}

Предполагается, что у вашего класса есть ссылка на theFourthTextField. Если это не так, вы можете добавить один и подключить его к вашему файлу XIB как IBOutlet.

В интерфейсе:

@interface YourClass {
    IBOutlet UITextField* theFourthTextField;
    //...
}

@property (nonatomic, retain) IBOutlet UITextField* theFourthTextField;

@end

В реализации:

@implementation YourClass

@synthesize theFourthTextField;

//...

@end

И подключите свое текстовое поле к theFourthTextField в Интерфейсном Разработчике.

1 голос
/ 26 августа 2011

Если вы не хотите добавлять IBOutlet к каждому из textFileds, другой способ сделать это - установить и отслеживать номер тега для идентификации каждого UITextField.Кстати, это также будет работать с любым объектом UIView, таким как кнопки, изображения и т. Д. Добавление тега к чему-либо также позволяет получить ссылку на этот объект, вызвав [self.view viewWithTag:MY_DEFINED_TAG_ID];, что может пригодиться.

В этом случае вы должны начать с файла xib, куда вы перетаскивали UITextField в окно и установить для каждого поля собственный тег #, который вы можете использовать для проверки идентификатора поля из вашего метода.В инспекторе атрибутов вы найдете поле «Тег».

В дополнение к этому вы можете в своем файле .h определить теги, чтобы их было легче отслеживать.Этот список определений может находиться в файле yourClass.h или Constants.h, если у вас есть такой файл, и в этом случае просто убедитесь, что вы #import Constants.h включены в файл yourClass.h.Я знаю, что есть и другие места, где вы могли бы все это определить, но это два.

#define TEXTFIELD1_TAG 900
#define TEXTFIELD2_TAG 901
#define TEXTFIELD3_TAG 902
#define TEXTFIELD4_TAG 903

Если вы собираетесь использовать – textFieldShouldBeginEditing: или любой другой метод делегата, убедитесь, что ваш класс UITextFieldDelegate.В yourClass.h (я предполагаю, что это viewController) вам понадобится такая строка:

@interface My_ViewController : UIViewController < UITextFieldDelegate >

Затем вы сможете использовать любой из этих методов в своем представлении для отслеживания textFields:

– textFieldShouldBeginEditing:
– textFieldDidBeginEditing:
– textFieldShouldEndEditing:
– textFieldDidEndEditing:
– textField:shouldChangeCharactersInRange:replacementString:
– textFieldShouldClear:
– textFieldShouldReturn:

Но есть и другие варианты размещения кода переключателя / регистра в зависимости от вашего рабочего процесса.Если вы посмотрите в свой файл xib, то обнаружите, что с вашим текстовым полем связано множество событий, которые могут запускать любой пользовательский метод, который вы пишете.Например, вы можете подключить событие TouchDown для запуска пользовательского метода, подобного приведенному ниже, который содержит код переключателя / регистра, который вы можете поместить в любое место, где вам нужно.

В этом методе я использую #define, которое мы виделивыше, чтобы проверить значения тега.Таким образом, мне не нужно запоминать номер тега, я могу просто вспомнить TEXTFIELD1_TAG, что намного проще.

    - (IBAction)textFieldHasBeenTouched:(id)sender {
         int textFieldTag = sender.tag
         switch (textFieldTag)
         {
              case TEXTFIELD1_TAG:
                   // TextField 1
                   break;
              case TEXTFIELD2_TAG:
                   // TextField 2
                   break;
              case TEXTFIELD3_TAG:
                   // TextField 3
                   break;
              case TEXTFIELD4_TAG:
                   // TextField 4
                   break;
              default:
                   break;
         }
}

Или используйте один из методов делегата.В этом методе я предполагал, что вы не используете #define для отслеживания тегов.Но так как вы установили их в xib, вы знаете, что они есть.

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {

             switch ([textField tag])
             {
                  case 900:
                       // TextField 1
                       break;
                  case 901:
                       // TextField 2
                       break;
                  case 902:
                       // TextField 3
                       break;
                  case 903:
                       // TextField 4
                       break;
                  default:
                       break;
             }
    return YES;
}
1 голос
/ 26 августа 2011

Вы можете сохранить все ссылки на textFields и добавить оператор переключения в свою функцию. Или вы можете установить различные теги для этого textFields и проверить тег UITextField textField в своей функции.

0 голосов
/ 26 августа 2011

У вас должны быть ссылки на ваши 4 textFields, верно? Проверьте, если (textField == textField4), а затем выполните свой код.

...