Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

}

— (BOOL)textFieldShouldReturn:(UITextField *)textField{

[textField resignFirstResponder];

return YES;

}

— (void)viewDidLoad{

[super viewDidLoad];

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 = NSTextAlignmentCenter;

self.myTextField.text = @"Sir Richard Branson";

[self.view addSubview: self.myTextField];

CGRect labelCounterFrame = self.myTextField.frame;

labelCounterFrame.origin.y += textFieldFrame.size.height + 10;

self.labelCounter = [[UILabel alloc] initWithFrame: labelCounterFrame];

[self.view addSubview: self.labelCounter];

[self calculateAndDisplayTextFieldLengthWithText: self.myTextField.text];

}

Мы

делаем важное вычисление в методе textField: shouldChangeCharactersInRange: replacementString:. Здесь мы объявляем и используем переменную wholeText. Когда вызывается этот метод, параметр replacementString указывает строку, которую пользователь ввел в текстовое поле. Вы, возможно, полагаете, что пользователь может вводить по одному символу в каждый момент времени, поэтому почему бы не присвоить данному полю значение char? Но не забывайте, что пользователь может вставить в текстовое поле целый фрагмент текста, по этой причине данный параметр должен быть строковым. Параметр shouldChangeCharactersInRange указывает место в текстовом поле, с которого пользователь начинает вводить текст. Итак, с помощью двух этих параметров мы создаем строку, которая сначала считывает весь текст из текстового поля, а потом использует заданный диапазон, чтобы разместить новый текст рядом со старым. Итак, получается, что вводимый нами текст будет появляться в поле после того, как метод 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, левый вид будет отображаться, только пока пользователь не редактирует текстовое поле. Как только редактирование начнется, левый вид исчезнет. Теперь запустим наш код в эмуляторе (рис. 1.53).

Поделиться:
Популярные книги

Зодчий. Книга IV

Погуляй Юрий Александрович
4. Зодчий Империи
Фантастика:
аниме
фэнтези
попаданцы
7.00
рейтинг книги
Зодчий. Книга IV

Моров. Том 1 и Том 2

Кощеев Владимир
1. Моров
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Моров. Том 1 и Том 2

Инженер Петра Великого 2

Гросов Виктор
2. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Инженер Петра Великого 2

Московское золото и нежная попа комсомолки. Часть Пятая

Хренов Алексей
5. Летчик Леха
Фантастика:
попаданцы
5.00
рейтинг книги
Московское золото и нежная попа комсомолки. Часть Пятая

Студиозус 2

Шмаков Алексей Семенович
4. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус 2

Викинг

Мазин Александр Владимирович
1. Викинг
Приключения:
исторические приключения
8.92
рейтинг книги
Викинг

Вечный. Книга IV

Рокотов Алексей
4. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга IV

Ведун

Сухов Александр Евгеньевич
1. Второй шанс
Фантастика:
фэнтези
боевая фантастика
альтернативная история
5.00
рейтинг книги
Ведун

География растений

Гумбольдт Александр
Классики естествознания
Научно-образовательная:
ботаника
7.50
рейтинг книги
География растений

Последний Паладин

Саваровский Роман
1. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин

Железный Воин Империи

Зот Бакалавр
1. Железный Воин Империи
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Железный Воин Империи

Черная метка

Лисина Александра
7. Гибрид
Фантастика:
технофэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Черная метка

Дорогами алхимии

Видум Инди
2. Под знаком Песца
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Дорогами алхимии

Я - истребитель

Поселягин Владимир Геннадьевич
1. Я - истребитель
Фантастика:
альтернативная история
8.19
рейтинг книги
Я - истребитель