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

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

Жанры

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

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

Шрифт:

[paramView addSubview: self.registerButton];

}

Итак, почти все готово. Следующая крупная задача — создать методы, которые позволят сконструировать и собрать все ограничения в массив. У нас также есть удобный четвертый метод, который собирает все ограничения от всех трех компонентов пользовательского интерфейса и объединяет их в общий большой массив. Вот как мы его реализуем:

— (NSArray *) emailTextFieldConstraints{

NSMutableArray *result = [[NSMutableArray alloc] init];

NSDictionary *viewsDictionary =

NSDictionaryOfVariableBindings(_textFieldEmail);

[result addObjectsFromArray:

[NSLayoutConstraint constraintsWithVisualFormat: kEmailTextFieldHorizontal

options:0

metrics: nil

views: viewsDictionary]

];

[result addObjectsFromArray:

[NSLayoutConstraint constraintsWithVisualFormat: kEmailTextFieldVertical

options:0

metrics: nil

views: viewsDictionary]

];

return [NSArray arrayWithArray: result];

}

— (NSArray *) confirmEmailTextFieldConstraints{

NSMutableArray *result = [[NSMutableArray alloc] init];

NSDictionary *viewsDictionary =

NSDictionaryOfVariableBindings(_textFieldConfirmEmail, _textFieldEmail);

[result addObjectsFromArray:

[NSLayoutConstraint constraintsWithVisualFormat: kConfirmEmailHorizontal

options:0

metrics: nil

views: viewsDictionary]

];

[result addObjectsFromArray:

[NSLayoutConstraint constraintsWithVisualFormat: kConfirmEmailVertical

options:0

metrics: nil

views: viewsDictionary]

];

return [NSArray arrayWithArray: result];

}

— (NSArray *) registerButtonConstraints{

NSMutableArray *result = [[NSMutableArray alloc] init];

NSDictionary *viewsDictionary =

NSDictionaryOfVariableBindings(_registerButton, _textFieldConfirmEmail);

[result addObject:

[NSLayoutConstraint constraintWithItem: self.registerButton

attribute: NSLayoutAttributeCenterX

relatedBy: NSLayoutRelationEqual

toItem: self.view

attribute: NSLayoutAttributeCenterX

multiplier:1.0f

constant:0.0f]

];

[result addObjectsFromArray:

[NSLayoutConstraint constraintsWithVisualFormat: kRegisterVertical

options:0

metrics: nil

views: viewsDictionary]

];

return [NSArray arrayWithArray: result];

}

— (NSArray *)constraints{

NSMutableArray *result = [[NSMutableArray alloc] init];

[result addObjectsFromArray: [self emailTextFieldConstraints]];

[result addObjectsFromArray: [self confirmEmailTextFieldConstraints]];

[result addObjectsFromArray: [self registerButtonConstraints]];

return [NSArray arrayWithArray: result];

}

Фактически

здесь мы имеем метод экземпляра constraints, относящийся к контроллеру вида; этот метод собирает ограничения от всех трех компонентов пользовательского интерфейса, а потом возвращает их все как один большой массив. Теперь переходим к основной части контроллера — методу viewDidLoad:

— (void)viewDidLoad{

[super viewDidLoad];

[self constructUIComponents];

[self addUIComponentsToView: self.view];

[self.view addConstraints: [self constraints]];

}

Этот метод просто собирает пользовательский интерфейс, добавляя сам к себе все компоненты пользовательского интерфейса и связанные с ними ограничения. При этом он использует методы, написанные нами ранее. Отлично, но что мы увидим на экране, когда запустим эту программу? Мы уже видели, как этот интерфейс выглядит на устройстве, работающем в книжной ориентации (см. рис. 3.4). А теперь повернем устройство и посмотрим, что получится при альбомной ориентации (рис. 3.5).

Рис. 3.5. Ограничения функционируют в альбомном режиме не хуже, чем в книжном

См. также

Разделы 3.0 и 3.1.

3.3. Применение ограничений при работе с перекрестными видами

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

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

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

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

Бракованная невеста. Академия драконов

Милославская Анастасия
Фантастика:
фэнтези
сказочная фантастика
5.00
рейтинг книги
Бракованная невеста. Академия драконов

Неудержимый. Книга XVIII

Боярский Андрей
18. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVIII

Жена со скидкой, или Случайный брак

Ардова Алиса
Любовные романы:
любовно-фантастические романы
8.15
рейтинг книги
Жена со скидкой, или Случайный брак

Шаман. Похищенные

Калбазов Константин Георгиевич
1. Шаман
Фантастика:
боевая фантастика
попаданцы
6.44
рейтинг книги
Шаман. Похищенные

Совок

Агарев Вадим
1. Совок
Фантастика:
фэнтези
детективная фантастика
попаданцы
8.13
рейтинг книги
Совок

Убивать чтобы жить 3

Бор Жорж
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

Разбуди меня

Рам Янка
7. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
остросюжетные любовные романы
5.00
рейтинг книги
Разбуди меня

Камень. Книга вторая

Минин Станислав
2. Камень
Фантастика:
фэнтези
8.52
рейтинг книги
Камень. Книга вторая

Ведьма Вильхельма

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
8.67
рейтинг книги
Ведьма Вильхельма

Герцог и я

Куин Джулия
1. Бриджертоны
Любовные романы:
исторические любовные романы
8.92
рейтинг книги
Герцог и я

Кодекс Охотника. Книга XVII

Винокуров Юрий
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVII

Плохая невеста

Шторм Елена
Любовные романы:
любовно-фантастические романы
7.71
рейтинг книги
Плохая невеста