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

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
haiatov
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 9
#1

Два segue, Два viewController, Одно отображение - Программирование iOS/iPhone

21.01.2016, 20:59. Просмотров 351. Ответов 6
Метки нет (Все метки)

Добрый день! Изучаю работу c segue - и столкнулся с проблемой.

Какая стоит передо мной задача. Есть два класса (viewController), один наследуется от другого.
Отображение для них общее.

Мне нужно с главного отображения переходить на следующее отображение, но в зависимости от кнопки, выбирать для этого отображения конкретный класс

Если делать без storyboard - то все просто. Я создаю нужный мне viewController (initWithXibName) указывая свое отображение.

Здесь же я создал 2 segue - оба получается от соответствующих кнопок. Обе ведут на второе отображение. Но ведь в IB класс указан в настройках.

Я использую функцию prepareForSegue, но не пойму как изменить класс для этого отображения.

Это возможно? Хотелось бы использовать одно отображение, чтобы не плодить второе отображение (потому что просто два режима, просмотр записи, и добавление записи) - но хотелось бы два контроллера.

Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2016, 20:59     Два segue, Два viewController, Одно отображение
Посмотрите здесь:

два viewController-a
Segue
2 ViewController Objective-C
Изменить ViewController
Переход по segue
xcode ViewController
Модальный ViewController
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cin_cout
26 / 26 / 7
Регистрация: 06.10.2012
Сообщений: 119
22.01.2016, 16:09     Два segue, Два viewController, Одно отображение #2
Если у вас 1 View, зачем 2 View Controller'a ? С 1 вьюхой отлично справится 1 VC, просто пропишите функционал, обусловленный какими-то actions/events - по нажатию кнопок Done / Cancel и тд
Например, есть 2 сегвея PresentModally к View, которым управляет ItemDetailViewController.
В TableViewController (делегат), откуда открывается ItemDetailViewController, прописываю:

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "Добавить" {
            let navigationController = segue.destinationViewController as! UINavigationController
            let controller = navigationController.topViewController as! ItemDetailViewController
            controller.delegate = self
        } else if segue.identifier == "Редактировать" {
            let navigationController = segue.destinationViewController as! UINavigationController
            let controller = navigationController.topViewController as! ItemDetailViewController
            controller.delegate = self
            if let indexPath = tableView.indexPathForCell(sender as! UITableViewCell) {
                controller.itemToEdit = somelist.items[indexPath.row]
            }
        }
    }
Дальше нужен протокол для экрана добавления/редактирования.
Типа такого:

Objective-C
1
2
3
4
5
6
7
8
9
10
11
protocol ItemDetailViewControllerDelegate: class {
    func itemDetailViewControllerDidCancel(controller: ItemDetailViewController)
    func itemDetailViewController(controller: ItemDetailViewController, didFinishAddingItem item: ваш добавляемый объект)
    func itemDetailViewController(controller: ItemDetailViewController, didFinishEditingItem item: ваш редактируемый объект)
}
 
class ... {
 
weak var delegate: ItemDetailViewControllerDelegate?
 
}
И реализация методов протокола в делегате.
С самого начала VC-делегат вписан в NavigationController (в режиме Storyboard: Editor -> Embed in -> NavigationController)
haiatov
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 9
29.01.2016, 09:34  [ТС]     Два segue, Два viewController, Одно отображение #3
Спасибо, за подробный ответ!

Это понятно, что в моем случае можно и так реализовать, через 1 контроллер. Теоретически, как можно реализовать, то, что я написал. Нельзя?
cin_cout
26 / 26 / 7
Регистрация: 06.10.2012
Сообщений: 119
29.01.2016, 14:47     Два segue, Два viewController, Одно отображение #4
У меня вопрос:
один VC наследуется от другого - какая задача у такой архитектуры? Условный VC уже наследует UIViewController'у, зачем еще один child?
haiatov
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 9
29.01.2016, 15:25  [ТС]     Два segue, Два viewController, Одно отображение #5
прошу прощения, не совсем понял вопроса) Можно ведь сказать, объект уже наследуется от NSObject зачем еще наследование делать)

У меня есть поведение которое описано в одном UV. другими я хотел его просто расширить. Не хотелось все в один вставлять и разными if-ами разделять
cin_cout
26 / 26 / 7
Регистрация: 06.10.2012
Сообщений: 119
30.01.2016, 08:46     Два segue, Два viewController, Одно отображение #6
Цитата Сообщение от haiatov Посмотреть сообщение
объект уже наследуется от NSObject
ранее было:
Цитата Сообщение от haiatov Посмотреть сообщение
Есть два класса (viewController), один наследуется от другого.
в первом случае мы говорим о модели данных
во втором - о контроллере

где правда?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2016, 12:49     Два segue, Два viewController, Одно отображение
Еще ссылки по теме:

Передача данных segue Objective-C
Objective-C MVC storyboard+ViewController
Objective-C Не освобождается память после unwind segue
CollectionView & Segue Swift
Ручной переход segue Swift

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
haiatov
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 9
30.01.2016, 12:49  [ТС]     Два segue, Два viewController, Одно отображение #7
я утрировал) просто не понял Ваш вопрос, о том, зачем нужен еще один уровень наследования.

На самом деле, я изучаю(вспоминаю) objective-c пользуясь книгами (одна из них Head First) - ну так вот там был еще ios5. Я пытаюсь реализовать примеры из книги, но исползуя новые возможности, в данном случае SEGUE.

В книге используется простой прием. initWithXibName. Который позволяет загрузить любой VC с любым отображением. Здесь же так не получается - поэтому у меня появился этот вопрос)

Понятно, что есть другие пути решения, но хочется именно вникнуть, как все работает - и сделать так же как в книге, но другими методами
Yandex
Объявления
30.01.2016, 12:49     Два segue, Два viewController, Одно отображение
Ответ Создать тему
Опции темы

Текущее время: 17:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru