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




>@synthesize mySwitch;


>…


Можно продолжить и перейти к созданию переключателя. Найдем метод viewDidLoad в файле реализации нашего контроллера вида:


>– (void)viewDidLoad{

>[super viewDidLoad];

>}

>Создадим переключатель и поместим его в виде, в котором находится контроллер нашего вида:

>– (void)viewDidLoad{

>[super viewDidLoad];


>/* Создаем переключатель */

>self.mainSwitch = [[UISwitch alloc] initWithFrame:

>CGRectMake(100, 100, 0, 0)];


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

>}


Итак, мы выделили объект типа UISwitch и применили метод initWithFrame: для инициализации переключателя. Обратите внимание: параметр, который мы должны передать этому методу, относится к типу CGRect. CGRect определяет границы прямоугольника, отсчитывая их от точки с координатами (x; y), находящейся в левом верхнем углу прямоугольника, и также используя данные о его ширине и высоте. Можно создать CGRect, воспользовавшись встраиваемым методом CGRectMake, где первые два параметра, передаваемые методу, – это координаты (x; y), а следующие два – высота и ширина прямоугольника.

Создав переключатель, мы просто добавляем его к виду нашего контроллера.

Теперь запустим приложение на эмуляторе iPhone. На рис. 1.8 показано, что происходит.


Рис. 1.8. Переключатель, размещенный в виде


Как видите, по умолчанию переключатель находится в состоянии Off (Выкл.). Чтобы задать в качестве стандартного противоположное состояние, можно изменить значение свойства on экземпляра UISwitch. Или можно вызвать метод setOn:, относящийся к переключателю:

[self.mySwitch setOn: YES];

Мы можем немного облегчить работу пользователю, применив метод переключателя setOn: animated:. Параметр animated принимает логическое значение. Если логическое значение равно YES, то при переходе переключателя из состояния on в состояние off этот процесс будет анимироваться, а также будут анимироваться любые взаимодействия пользователя с переключателем.

Очевидно, вы можете считывать информацию свойства on переключателя, чтобы узнавать, включен переключатель в данный момент или выключен. В качестве альтернативы можно пользоваться методом переключателя isOn:


>if ([self.mySwitch isOn]){

>NSLog(@"The switch is on.");

>} else {

>NSLog(@"The switch is off.");

>}


Если вы хотите получать уведомления о том, когда переключатель переходит в состояние «включено» или «выключено», необходимо указать ваш класс как цель (Target) переключателя, воспользовавшись методом addTarget: action: forControlEvents: класса UISwitch:


>[self.mySwitch addTarget: self

>action:@selector(switchIsChanged:)

>forControlEvents: UIControlEventValueChanged];


Затем реализуем метод switchIsChanged:. Когда среда времени исполнения вызовет этот метод в ответ на событие переключателя UIControlEventValueChanged, она передаст переключатель как параметр данного метода и вы сможете узнать, какой именно переключатель инициировал данное событие:


>– (void) switchIsChanged:(UISwitch *)paramSender{


>NSLog(@"Sender is = %@", paramSender);


>if ([paramSender isOn]){

>NSLog(@"The switch is turned on.");

>} else {

>NSLog(@"The switch is turned off.");

>}


>}


Теперь попробуем запустить наше приложение в эмуляторе iOS. В окне консоли вы увидите примерно такие сообщения:


>Sender is = 

>frame = (100 100; 79 27);

>layer = >

>The switch is turned off.

>Sender is = 

>frame = (100 100; 79 27);

>layer = >