2013-03-30 3 views
0

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

  • будет содержать состав UIViews, этикетки, кнопки и TableView.
  • должно быть возможно запрограммировать его программно - или - поместить UIView в редактор nib и изменить класс в инспекторе на мой собственный класс компонентов. (и это будет поддерживать/поддерживать значения основного кадра из размещенного UIView)

Я уже начал экспериментировать с этим, я выбрал UIView, но он не обрабатывает метод ячейки .cellForRow .... С другой стороны, если я использую UIViewController, то изменение моего класса в инспекторе не работает, и приложение выходит из строя.

Какой из них выбрать - UIView, UIviewController или NSObject?

+0

Если вы наследуете NSObject, все функции UIView и т. Д. Не могут быть получены. Я бы сказал, прости меня от самого низкого уровня, а затем использовать протоколы для использования других методов/особенностей/поведения. –

+0

В этом случае я бы наследовал от UITableView, поскольку это самый сложный UIItem, и поэтому большинство интерфейсов уже определены. UIView тоже будет работать, потому что это общая основа для всех. Но тогда необходимо добавить все (необходимые) дополнительные методы и свойства UIButton, UILabel и UITableView. Таким образом, в конечном итоге это зависит от того, какие интерфейсы требуется новому объекту представления, и к которым они должны быть перезаписаны. Тогда я бы пошел за тем, где большинство из них не нужно перезаписывать в подклассе и их можно использовать только как они есть. –

+0

Ваш объект не должен обрабатывать cellForRowAtIndexPath :, или любой из других методов источника данных - в представлении таблицы нет. Это должно обрабатываться контроллером, которому вы назначаете источник данных и делегировать свой объект, который, вероятно, будет контроллером, чей вид имеет ваш пользовательский объект в качестве подзадачи. Я думаю, UIView - правильный суперкласс. – rdelmar

ответ

0

Я бы пошел на UIViewController или UITableViewController, так как вы сказали, что у вас есть tableView. Если вы делаете UIViewController, вы, вероятно, придется включить еще UITableViewController внутри него, используя addChildViewController, как описано here

Я считаю, что причина, почему ваше приложение рушится, что вы вы изменили класс суперкласс от UIView к UIViewController, но в Interface Builder у вас все еще есть объект UIView. Вам нужно изменить его на UIViewController в Interface Builder и выбрать свой класс в качестве владельца файла.

+0

Как я буду удовлетворять требованию «поместить» компонент в IB «как любой другой элемент управления?» Поместите его правильно в иерархию UI? –

+0

Если вы хотите, чтобы ваш пользовательский объект показывался в библиотечных объектах Interface Builder, Я не думаю, что это возможно. Чтобы добавить через Interface Builder, вам нужно будет добавить контейнер UIView или view, и вы сможете обработать его, чтобы иметь нужный фрейм в методах init. – rantunes

+0

Мое второе требование ясно подразумевает, что это не тот случай. –

0

Если вы намерены это быть автономным компонентом со всей логикой, содержащейся в элементе управления, то я бы основал его на UIViewController, как это делает Apple с MFMailComposeViewController. Если вы хотите, чтобы это было строго представление, без собственной встроенной логики, но вместо этого делегирует эту логику, затем используйте UIView и делегируйте методы представления таблиц контроллеру, который его использует.

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