2015-02-06 4 views
0

У меня есть несколько контроллеров View, все с использованием UITableView с идентичными пользовательскими ячейками. Методы UATableView Datasource также идентичны (к строке); все изменения - это сам источник данных (массив, из которого загружается табличное представление). Для меня кажется излишним копировать тот же самый код для 5 таких контроллеров View (не говоря уже о плохой практике кодирования!).Как создать базовый класс ViewController с UITableView?

Поэтому я думал о создании базового (или родительского) контроллера вида, который расширяет UIViewController и имеет все мои следующие (дочерние) контроллеры, наследуемые от этого контроллера базового представления.

Моя проблема заключается в следующем: у моего контроллера базового представления должно быть свойство UITableView, а также методы DataSource. Я не могу заставить UITableViews в контроллерах дочерних представлений ссылаться на родительский класс для своего DataSource.

Я на совершенно неправильном пути? Есть ли лучший подход к этой проблеме? Любая помощь очень ценится!

ответ

0

Просто у вас есть один контроллер, в который вы добавляете свойство для источника данных.

Когда вы переходите к контроллеру или создаете его, задайте свойство источника данных.

Если весь код идентичен, за исключением массива источников данных, вам нужен только один контроллер.

В xcode добавьте новый исходный файл: например. MyDataViewerController, который наследует UITableViewController.

В этом файле при создании, добавить свойство формы:

@property NSArray *dataSource; 

Нажмите на одном из контроллеров просмотреть в раскадровке и нажмите на вкладку инспектора атрибутов класса. Установите класс MyDataViewerController.

Теперь вы можете использовать этот контроллер для отображения любых ваших данных. Вероятно, вы можете удалить все остальные.

Я принял его массив, содержащий данные. Замените это тем, что вы используете.

Предполагая, что вы перейдете к этому контроллеру откуда-нибудь, установите свойство в функции prepareForSegue.

+0

Спасибо! Не могу поверить, что я этого не замечал; Я делал это много раз раньше. Я использовал стороннюю библиотеку для перехода к этим представлениям, а не к обычным сегментам, что, вероятно, почему-то я не обратил на это внимания. Еще раз спасибо! – vinn

Смежные вопросы