2012-04-21 4 views
1

Для приложения с одним представлением добавлен класс DrawView, который является подклассом класса UIView.На iPad, initWithFrame нового класса на основе UIView не называется?

Он используется в качестве основного вида приложения, поэтому метод drawRect этого класса работает хорошо, может рисовать вещи, например, но код, сгенерированный Xcode, имеет строку «// Код инициализации», init там, внутри initWithFrame, но я помещал туда некоторый код, и он не вызывается, а точка останова установлена ​​там, но он никогда не останавливается на этом? Затем я добавил init, используя обычный метод, и он также не называется?

+1

ли вид загружается из кончика пера? – tronbabylove

+0

он установлен как вид для использования по умолчанию ViewController.xib ... это то же самое, что и загруженный из ниба? –

ответ

3

Попробуйте переопределить - (id) initWithCoder: (NSCoder *) кодер. Я полагаю, что когда представление загружается из nib, он использует этот метод init. См. Вопрос this.

+0

, если «initWithCoder» добавлен без кода инициализации, тогда будет вызвана точка останова «initWithFrame» (и там будет запущен любой код инициализации) ..., а также цвет фона, заданный в Interface Builder, не будет использоваться. Все черное. Можно ли использовать набор цветов в Interface Builder? –

+0

Вы уверены, что вам нужно переопределить init, или вы можете использовать awakeFromNib? (Позволяет выполнить пользовательскую инициализацию после загрузки nib.) – tronbabylove

+2

Это правильный ответ. Если вы потенциально будете использовать класс как от NIB, так и от экземпляра кода, просто создайте какой-то метод -commonConfiguration (или подобное имя) и вызовите его из обоих мест. Тогда ваш код инициализации находится в одном месте. – atticus

1
  • initWithCoder: - Рекомендуется, чтобы вы Реализуйте этот метод, если вы загрузите вид из файла СИБ Interface Builder и ваш взгляд требует пользовательского initialization.The кода СИБ-загрузки не использует initWithFrame: метод для создания новых объектов вида. Вместо этого он использует метод initWithCoder:, который является частью протокола NSCoding. Код nib-load не использует метод initWithFrame: для создания новых объектов представления. Вместо этого он использует метод initWithCoder:, который является частью протокола NSCoding.apple's doc

  • initWithFrame: - метод инициализации по умолчанию для представлений, Новый объект вида должен быть вставлен в иерархию вида окна, прежде чем он может быть использован. Если вы создаете объект представления программно, этот метод является назначенным инициализатором для класса UIView.

еще некоторая информация здесь: overriding methods

рад помочь :)

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