>self.label.backgroundColor = [UIColor clearColor];

>self.label.text = @"iOS SDK";

>self.label.font = [UIFont boldSystemFontOfSize:70.0f];

>self.label.textColor = [UIColor blackColor];

>self.label.shadowColor = [UIColor lightGrayColor];

>self.label.shadowOffset = CGSizeMake(2.0f, 2.0f);

>[self.label sizeToFit];

>self.label.center = self.view.center;

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


>}


>@end

См. также

Разделы 1.17, 1.26.

1.19. Прием пользовательского текстового ввода с помощью UITextField

Постановка задачи

Необходимо принимать через пользовательский интерфейс программы текст, вводимый пользователем.

Решение

Воспользуйтесь классом UITextField.

Обсуждение

Текстовое поле очень похоже на подпись тем, что в нем также можно отображать текстовую информацию. Но текстовое поле, в отличие от подписи, может принимать текстовый ввод и во время исполнения. На рис. 1.49 показаны два текстовых поля в разделе Twitter приложения Settings (Настройки) в iPhone.


Рис. 1.49. Текстовые поля, в которые можно вводить текст

В текстовом поле можно вводить и отображать только одну строку текста. Именно поэтому стандартная высота текстового поля, задаваемая по умолчанию, – всего 31 пункт. Эту высоту нельзя изменить в конструкторе интерфейса, но если вы создаете текстовое поле прямо в коде, то сделать это можно. Тем не менее при изменении высоты не изменяется количество строк, которые можно записать в текстовом поле, – строка всегда всего одна.

Чтобы определить наше текстовое поле, начнем работу с файла реализации контроллера вида:


>#import "ViewController.h"


>@interface ViewController ()

>@property (nonatomic, strong) UITextField *myTextField;

>@end


>@implementation ViewController


>…


А потом создадим это текстовое поле:


>– (void)viewDidLoad{

>[super viewDidLoad];


>CGRect textFieldFrame = CGRectMake(0.0f,

>0.0f,

>200.0f,

>31.0f);


>self.myTextField = [[UITextField alloc]

>initWithFrame: textFieldFrame];


>self.myTextField.borderStyle = UITextBorderStyleRoundedRect;


>self.myTextField.contentVerticalAlignment =

>UIControlContentVerticalAlignmentCenter;


>self.myTextField.textAlignment = NSTextAlignmentCenter;


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

>self.myTextField.center = self.view.center;

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


>}


Прежде чем подробно рассматривать код, взглянем на результат его выполнения (рис. 1.50).

При создании этого текстового поля мы использовали различные свойства класса UITextField:

• borderStyle – свойство имеет тип UITextBorderStyle и указывает, как должны отображаться границы текстового поля;

• contentVerticalAlignment – это значение типа UIControlContentVerticalAlignment, сообщающее текстовому полю, как текст должен отображаться по вертикали в границах этого поля. Если не выровнять текст по центру по вертикали, он по умолчанию отобразится в левом верхнем углу поля;

• textAlignment – это свойство имеет тип UITextAlignment и указывает выравнивание текста в текстовом поле по горизонтали. В данном примере текст выровнен в текстовом поле по центру и по горизонтали;

• text – это свойство доступно как для считывания, так и для записи. То есть можно не только получать из него информацию, но и записывать туда новые данные. Функция считывания возвращает текст, который в данный момент находится в текстовом поле, а функция записи задает для текстового поля то значение, которое вы в ней указываете.


Рис. 1.50. Простое текстовое поле, текст в котором выровнен по центру


Текстовое поле посылает сообщения-делегаты своему объекту-делегату. Такие сообщения отправляются, например, когда пользователь начинает изменять (редактировать) информацию в текстовом поле (как-либо изменяет его содержимое) и когда он прекращает взаимодействовать с полем (покидает его). Чтобы получать уведомления об этих событиях, задайте ваш объект в качестве значения свойства delegate текстового поля. Делегат текстового поля должен соответствовать протоколу UITextFieldDelegate, так что позаботимся об этом: