iOS. Приемы программирования - страница 54



того, как метод textField: shouldChangeCharactersInRange: replacementString: возвратит YES. На рис. 1.51 показано, как приложение будет выглядеть в эмуляторе.


Рис. 1.51. Реагирование на сообщения-делегаты текстового поля


В текстовом поле может отображаться не только текст, но и подстановочные (джокерные) символы. Подстановочный текст отображается до того, как пользователь введет в это поле какой-нибудь собственный текст, пока свойство text текстового поля является пустым. В качестве подстановочного текста вы можете использовать любую строку, какую хотите, но лучше этим текстом подсказать пользователю, для ввода какой именно информации предназначено данное поле. Многие программисты указывают в подстановочном тексте, значения какого типа может принимать данное поле. Например, на рис. 1.49 в двух текстовых полях (для ввода имени пользователя и пароля) стоит подстановочный текст Required (Обязательно). Можно использовать свойство placeholder текстового поля для установки или получения актуального подстановочного текста:


>CGRect textFieldFrame = CGRectMake(38.0f,

>30.0f,

>220.0f,

>31.0f);

>self.myTextField = [[UITextField alloc]

>initWithFrame: textFieldFrame];


>self.myTextField.delegate = self;


>self.myTextField.borderStyle = UITextBorderStyleRoundedRect;


>self.myTextField.contentVerticalAlignment =

>UIControlContentVerticalAlignmentCenter;


>self.myTextField.textAlignment = UITextAlignmentCenter;


>self.myTextField.placeholder = @"Enter text here…";

>[self.view addSubview: self.myTextField];


Результат показан на рис. 1.52.

У текстовых полей есть два очень приятных свойства, которые называются leftView и rightView. Они относятся к типу UIView и доступны как для чтения, так и для записи. Они проявляются, как понятно из названий, в левой (left) и правой (right) частях текстового поля, когда вы присваиваете им определенный вид. Первое свойство (левый вид) может использоваться, например, при показе курсов валют. В этом случае слева отображается курс валюты страны, в которой проживает пользователь. Поле с этими данными относится к типу UILabel. Вот как можно решить такую задачу:


Рис. 1.52. Подстановочный текст отображается, когда пользователь еще ничего не ввел в поле


>UILabel *currencyLabel = [[UILabel alloc] initWithFrame: CGRectZero];

>currencyLabel.text = [[[NSNumberFormatter alloc] init] currencySymbol];

>currencyLabel.font = self.myTextField.font;

>[currencyLabel sizeToFit];

>self.myTextField.leftView = currencyLabel;

>self.myTextField.leftViewMode = UITextFieldViewModeAlways;


Если просто присвоить вид свойству leftView или rightView текстового поля, то эти виды не появятся автоматически. То, когда они появятся на экране, зависит от режима, управляющего их внешним видом. Данный режим контролируется свойствами leftViewMode и rightViewMode соответственно. Эти режимы относятся к типу UITextFieldViewMode:


>typedef NS_ENUM(NSInteger, UITextFieldViewMode) {

>UITextFieldViewModeNever,

>UITextFieldViewModeWhileEditing,

>UITextFieldViewModeUnlessEditing,

>UITextFieldViewModeAlways

>}


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