Если вы не хотите добавлять IBOutlet к каждому из текстовых файлов, вы можете сделать это другим способом — установить и отслеживать номер тега для идентификации каждого 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 >
Затем вы сможете использовать любой из этих методов в своем представлении для отслеживания текстовых полей:
– 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;
}
person
Mark Andrews
schedule
26.08.2011