Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
dr_OX
0 / 0 / 0
Регистрация: 09.07.2013
Сообщений: 12
1

Наследование класса, созданного в storyboard

22.09.2013, 15:20. Просмотров 926. Ответов 6
Метки нет (Все метки)

Добрый день. Возник вопрос с наследованием.
Есть приложение с двумя вкладками. На одной вкладке лежит коллекция А. Нужно на вторую вкладку повесить Коллекцию В, которая должна наследоваться от первой (А).

Кто-нибудь подскажет как это сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 15:20
Ответы с готовыми решениями:

Xib вайлы и storyboard
Всем доброго времени суток. Хотелось бы по подробнее узнать о xib файлах и...

как связать ViewController со Storyboard
Помогите пожалуйста связать ViewController с Storyboard. Создала iOS Empty...

Обновление XCode -> тормоза в StoryBoard
Всем привет! В первый же день выхода обновления XCode 5.0 - поставил новую...

Портирование в Xcode5, фокусы Storyboard
Всем привет! Являюсь жертвой популярной, как я могу судить по различным...

Интерфейс без Storyboard для новичка
Добрый день! Находясь сейчас в самом начале своего пути iOS-разработчика,...

6
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
22.09.2013, 15:23 2
В сториборде, в параметрах контроллера можно указать его тип.
1
dr_OX
0 / 0 / 0
Регистрация: 09.07.2013
Сообщений: 12
22.09.2013, 15:49  [ТС] 3
Цитата Сообщение от mobidevelop Посмотреть сообщение
В сториборде, в параметрах контроллера можно указать его тип.
В Custom Class? Так там у меня ссылка на текущий класс В. При тестировании выдаёт исключение:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'UICollectionView must be initialized with a non-nil layout parameter'
В сториборде у меня пустой контроллер, потому как я хочу, чтобы содержимое (а конкретно - коллекция) бралось из класса-родителя.
Как тут быть?
0
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
22.09.2013, 15:55 4
Ну если первый контроллер - UICollectionView. То и второй (его наследник) от этого никак не избавится. Гены-с. А значит, ему тоже Layout нужен. Хоть какой-нибудь.
0
dr_OX
0 / 0 / 0
Регистрация: 09.07.2013
Сообщений: 12
22.09.2013, 16:07  [ТС] 5
Цитата Сообщение от mobidevelop Посмотреть сообщение
Ну если первый контроллер - UICollectionView. То и второй (его наследник) от этого никак не избавится. Гены-с. А значит, ему тоже Layout нужен. Хоть какой-нибудь.
Так в классе-родителе есть всё, что нужно.
Загвоздка видимо в том, что при инициализации наследника, родитель инициализируется не своим кодером, а из наследника:

Objective-C
1
2
3
4
5
6
7
8
9
- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    
    if (self) {
        // Custom initialization
    }
    return self;
}
Можно ли как-то туда впихнуть нужный кодер, который ссылается на родительский интерфейс, и как это сделать?
0
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
22.09.2013, 16:25 6
Угадываю. Layout для первого контроллера прописан в сториборде, а не в коде. Layout для второго контроллера не прописан нигде.
Рассказываю. Контроллер строится из тех объектов, которые нарисованы на его окошке. Отчего бы он ни наследовался. Если успели пощупать ксибки - поймете почему. Если нет - просто поверьте, а поймете потом.
Советую. Положить на окошко второго контроллера еще один Layout и связать его со вторым контроллером. Если хочется сделать это один раз - связывание осуществлять в коде первого контроллера. viewDidLoad - самое подходящее место.

PS.
Даю справку. Птица секретарь отличается умом и сообразительностью.
0
dr_OX
0 / 0 / 0
Регистрация: 09.07.2013
Сообщений: 12
22.09.2013, 17:11  [ТС] 7
Цитата Сообщение от mobidevelop Посмотреть сообщение
Угадываю. Layout для первого контроллера прописан в сториборде, а не в коде. Layout для второго контроллера не прописан нигде.
Верно.

Цитата Сообщение от mobidevelop Посмотреть сообщение
Рассказываю. Контроллер строится из тех объектов, которые нарисованы на его окошке. Отчего бы он ни наследовался. Если успели пощупать ксибки - поймете почему. Если нет - просто поверьте, а поймете потом.
Вот этого я ранее не знал, но заподозрил позже. Я ведь изначально хотел с класса А стянуть не только функционал, прописанный в коде, но и визуальное оформление.
Выходит, это невозможно реализовать наследованием, а только посредством композиции, которая тоже не очень подходит.

Цитата Сообщение от mobidevelop Посмотреть сообщение
Советую. Положить на окошко второго контроллера еще один Layout и связать его со вторым контроллером.
Пробовал. А что толку, если в виду вышесказанного всё остальное там пусто.

Цитата Сообщение от mobidevelop Посмотреть сообщение
Если хочется сделать это один раз - связывание осуществлять в коде первого контроллера. viewDidLoad - самое подходящее место.
А тут у вышесказанному прибавляется ещё и то, что Layout указывается только при инициализации, а далее он - read-only.

Благодарю за ответы.

Выходит, что если использовать наследование, то придётся в сториборде тупо скопировать содержимое первого контроллера и вставить во второй, а код должен отнаследоваться.
А можно ли из родителя как-то создать компонент, который бы отображался с библиотеке наравне с коробочными?
0
22.09.2013, 17:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 17:11

Различия в storyboard, симуляторе и на тестируемом телефоне
Всем привет! Столкнулся с такой проблемой: Был storyboard с локализациями....

Как вывести Label без Storyboard?
Добрый день! Недавно начал изучать Swift и узнал, что можно задавать...

Создание приложения без использования Storyboard
Здравствуйте, дано задание (в названии). Совсем новичок в этой теме. Есть ли...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru