Форум программистов, компьютерный форум CyberForum.ru

Контроллер для свайпа и вынесение логики - Objective-C

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Objective-C Не освобождается память после unwind segue http://www.cyberforum.ru/objective-c/thread1688582.html
Здравствуйте! Объясните, пожалуйста, как правильно решить следующую проблему: Есть тестовое приложение с двумя экранами UINavigationController --> Экран 1 (UIViewController) --(show)--> Экран 2 (UITableViewController) На экране 1 всего одна кнопка (для перехода на экран 2), т.е. при запуске приложения памяти используется по-минимуму. На экране 2 - таблица из 10 строк (создаются с помощью...
Objective-C Литература C++ и Objective-C Здравствуйте. Книг по C++ гораздо больше, чем по Objective-C, т.к. его область применения шире, но вот интересно, почему по Objective-C нет книг типа "Эффективное использование Objective-C", в которых давались бы советы по улучшению качества кода? Это связано с тем, что Objective-C так хорош, что некачественный код на нем невозможно написать в принципе, или с тем, что C++ значительно сложнее и... http://www.cyberforum.ru/objective-c/thread1684629.html
Objective-C Autorotate на контротном viewcontroller
Всем привет, стоит такая задача дать возможность юзера повернуть экран autorotate - но только на одном viewcontroollere. Поиск особо ничего не дал, нахожу только старые коды которые для ios 789 - не катят. Мож у кого есть код, поделитесь) спасибо
Переменные NSStream для Socket's events Objective-C
Хочу использовать NSInputStream/NSOutputStream для работы с соединением, для этого в событии сокета kCFSocketAccetCallBack пытаюсь создать и зациклить прослушивание входных/выходных потоков: void AcceptCallBack(CFSocketRef socket, CFSocketCallBackType type, CFDataRef address, const void *data, void *info) { CFReadStreamRef readStream = NULL; CFWriteStreamRef writeStream = NULL; ...
Objective-C Автоперевод строки http://www.cyberforum.ru/objective-c/thread1678982.html
Всем привет! Вопрос наверное простой, но я ответа не смог найти. Вопрос: Xcode, есть текстовое поле, которое заполняется текстом (запись выполняемых действий). Не могу найти где поставить "галочку", чтобы при заполнении этого текстового поля показывалось не начало текста, а его конец, т.е. чтобы текст выравнивался по нижнему краю. Добавлено через 1 час 50 минут т.е. нужно чтоб текст по...
Objective-C Pdf reader Добрый день всем! Стоит задача, написать pdf читалку на ios , но с возможностью звонить из приложения. Т.е если на странице pdf файла указан номер телефона, чтоб была возможность позвонить. Может кто сталкивался, с чего начать, может есть какие библиотеки? Буду очень признателен за любую помощь. подробнее

Показать сообщение отдельно
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,277
23.03.2016, 21:50
Цитата Сообщение от lowlol Посмотреть сообщение
мультитир тоже самое, что архитектура слоев
Ага, где каждый слой отвечает, грубо говоря, за свой участок. Это более глобальное разделение приложения.

Цитата Сообщение от lowlol Посмотреть сообщение
к каким неочевидным последствием это может привести?
к таким, что вы добавляете сайд эффект на контроллер, плюс вы им даже не владеете.
гг, дальше объясняется

есть много способов дисмиснуть вьюконтроллер, вот самые распространенные:
1. дисмиснуть самого себя, когда сами знаете что нужно. Это не самый лучший вариант, т.к. контроллер должен знать как его показали - модально\пушнули\еще как-то, чтобы вызвать правильный дисмис метод. Т.е. жестко привязывается к какому-то конкретному контексту и его сложно переиспользовать в другом месте.

2. дисмисить его, когда он вас попросит. Это вариант получше, т.к. контроллер не знает как его показали и за отображение и скрытие контроллера отвечает один и тот же класс. Таким образом вы следите за тем, что с вами происходит, и вы знаете когда вы что-то показываете или когда вы что-то прячете.
Почему это лучше - потому что контроллер может выполнить какие-то дополнительные действия перед закрытием, например валидация данных, отображение какого-то сообщения и т.д.
И да, вы будете делегатом контроллера, который показываете, или создадите его с блоком, в котором будете вызывать его же дисмис. То же самое что и делегат, только делегат - объектно-ориентированные подход, а блоки - функциональный.

3. вы сами знаете, когда нужно дисмисить контроллер. Либо вы его показываете, как попап\алерт, либо вы сами на него навешиваете кнопки или контролы управления закрытием. Немного похоже на то, что сделали вы, но у вас не гибкий вариант с неявным сайд эффектом.
Когда это можно сделать - например, ваш скрин может показываться как модально, так и в навигейшен чейне, тогда ему вообще знать не нужно, кто, как и где его показал. Например, когда вы показываете его модально, то сами же навешиваете на него кнопку "Close/Hide/Dismiss" и т.д. и сами же слушаете когда на нее нажмут и тогда уже предлагаете контроллеру закрыться. Но это все дело лучше вынести в какую-то фабрику.
Аналогично, если вы его показываете в навигейшене, то вы обращаетсь к навигейшену и говорите, какой екшн должен срабатывать на кнопке "Назад". Но снова таки, если этот скрин может много где показываться, то навешивание кнопок\экшенов и конфигурацию лучше выделить в фабрику создания показываемого скрина.
Этот вариант - посложнее. В лучшем случае, вы создаете протокол для "показываемого". "Показываемый" знает, что его могут как-то дисмиснуть, но не знает как,
допустим это будет метод
Objective-C
1
- (BOOL)canBeDismissedWithCallback:(void (^)(void))callback;
И, собственно, контроллер, который будет "показываемым", имплементирует этот протокол и реализует метод. А реализует он его следующим образом, если он знает, что он полностью готов, к тому, чтобы его дисмиснули, он возвращает YES, если он не готов, он возвращает NO, и вызовет колбек тогда, когда будет готов. То же самое можно сделать и через делегат и тд., выбор за вами.

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

Почему с жестом не так очевидно - потому что вы, возможно, захотите реализовать свое поведение для такого же жеста, и - о совпадение, кто-то чье-то поведение перетрет.
С жестом лучше будет, если сам контроллер определит для себя на каком жесте он хочет закрываться, а когда жест сработает - он скажет делегату или, так сказать, тому, кто его показывает (по протоколу), что он хочет закрыться, и уже сверху, тот кто показывает, сам его и дисмиснет.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru