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

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

Жанры

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. Применение ограничений при работе с перекрестными видами

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

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

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

Гримуар темного лорда VII

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

Изгой Проклятого Клана. Том 6

Пламенев Владимир
6. Изгой
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Изгой Проклятого Клана. Том 6

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

Кодекс Крови. Книга I

Борзых М.
1. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга I

Наследник для дона мафии

Тоцка Тала
2. Наследники мафии
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
Наследник для дона мафии

Роза ветров

Кас Маркус
6. Артефактор
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Роза ветров

Я еще не царь

Дрейк Сириус
25. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я еще не царь

Черный Маг Императора 11

Герда Александр
11. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Черный Маг Императора 11

Родословная. Том 4

Ткачев Андрей Юрьевич
4. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Родословная. Том 4

Страж Кодекса. Книга VII

Романов Илья Николаевич
7. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга VII

Наномашины, сынок! Том 1

Новиков Николай Васильевич
1. Чего смотришь? Иди книгу читай
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наномашины, сынок! Том 1

Брак по-драконьи

Ардова Алиса
Фантастика:
фэнтези
8.60
рейтинг книги
Брак по-драконьи

Ваше Сиятельство 8

Моури Эрли
8. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 8

Сердце Дракона. Том 11

Клеванский Кирилл Сергеевич
11. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
6.50
рейтинг книги
Сердце Дракона. Том 11