Пример использования MVC в iOS — устройство сложного контрола + взаимодействие?

Хочу основательнее разобраться с применением паттерна MVC в iOS. Базовое представление имею, но для более сложных случаев понимания не хватает.

1. Например, как устроен UITableView? С одной стороны это просто View, взаимодействующий с моим контроллером. С другой — сложный контрол (control/ui). У него довольно разнообразное поведение: свайпы отдельных ячеек, режим редактирования, переупорядочивание ячеек, секции, разделы быстрого перехода…
Предполагаю, что внутри может быть такое же разделение на MVC. То есть для программиста это View, но внутри сидит Controller, с которым программист и общается. И уже этот контроллер занимается получением ячеек, их кешированием, отображением и остальными наворотами.
Либо тут вся логика содержится прямо в View и разделения нету.

С этим ± понятно, хотя я и не знаю точно, так ли оно реализовано.
Если у кого есть уточнения/примеры реализации такого чуда, пожалуйста, поделитесь.

2. Дальше непонятнее.
У UITableView есть замечательная способность: объединяться с UISearchBar. Хотя, скорее это способность UISearchBar. Интересует изменение «таблицы» после активации поля поиска. При этом UISearchBar перемещается вверх, встраиваясь в UINavigationBar. И за собой «подтягивает» UITableView.
Также UISearchBar в Safari гармонично объединён с UIWebView — плавно прячется в «нави-бар» при прокрутке страницы.

Вопрос: как такое взаимодействие реализуется и как согласуется с MVC ?

Также с радостью приму названия книг и ссылки на толковые статьи про MVC в iOS.
  • Вопрос задан
  • 6325 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Ne0nX
1) Почитайте https://developer.apple.com/Library/ios/documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html
Это обычный UIScrollView, он содержит в себе (subviews) в нашем случае UITableViewCell, ну еще дополнительные плюшки)
2)
UITableView *tableView = ...;
UISearchBar searchBar = ....;

tableView.tableHeaderView = searchBar; // Теперь SearchBar всегда над вашими ячейками.

В Safari, скорее всего, используется обычный кастомный View и он не как не связан с UINavigationController-ом и UINavigationBar-ом

Все прячется с помощью обычных анимаций
//Псевдокод 
//Y = высота экрана + высота View
[UIView animateWithDuration:<#(NSTimeInterval)#> animations:^{
        view.frame = CGRectMake(x, <Y> ,width,height);
}];


На счет MVC, все очень просто.
Пользователь видит представления(views), с их помощью он общается с контролером, а контролер уже общается с Моделями(Models),
Ответ написан
alexyat
@alexyat
iOS Developer
MVC в iOS достаточно специфичная, для вас главное понимать что это значит и для чего нужно - Model - модель(это ваши данные), View - представление(это кнопочки, надписи, все что видно) и Control - это логика, вспомогательные методы и классы которые в большинстве случаев помогают взаимодействовать первым двум. Вам важно понять что все эти вещи должны быть разделены, чтобы вы могли легко менять отдельные части, чтобы у вас не смешивались данные и интерфейс.
Ответ написан
GxocT
@GxocT
Почитайте этот материал: www.objc.io/issue-1/

Авторы объясняют какую логику по их мнению следует помещать во ViewController, а какую переносить в Model или View. Думаю после этого у вас будет гораздо меньше вопросов, вы сможете сформулировать свою точку зрения и лучше освоитесь с MVC :-)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы