2010-02-06 1 views
1

У меня есть пользовательский интерфейс, который создается программно. Как связать с ним пользовательский UIViewController (программно а)Как связать uicontroller с пользовательским программным обеспечением uiview

Спасибо и привет,

+0

Извините, что я имею в виду программно –

ответ

5

Внесите loadView в UIViewController, чтобы создать иерархию представлений программно без файла nib.

- (void)loadView { 
    // allocate the subclassed UIView, and set it as the UIViewController's main view 
    self.view = [[[UIViewSubclass alloc] initWithFrame:CGRectMake(0, 0, 320, 460)] autorelease]; 
} 

Вы можете продолжить настройку иерархии представления/подсмотра двумя способами. Одним из них является, чтобы добавить их в метод инициализации Обычай UIView «S, например, так:

// in the MyView.m file 
- (id)initWithFrame:(CGRect)f { 
    if (self = [super initWithFrame:f]) { 
     // add subviews here 
    } 
    return self; 
} 

Второй способ продолжать использовать loadView метод, реализованный в UIViewController подклассу, и только с помощью [self.view addSubview:anotherView]. (В качестве альтернативы, использовать метод viewDidLoad в UIViewController subclass.)

Примечание: Заменить initWithFrame: с тем, что способ инициализации пользовательских UIView «ы есть (например, initWithDelegate:).

+0

У вас есть утечка памяти в 'loadView'. 'view' является сохраненным свойством. – MrMage

+0

Упс, не заметил этого. Исправлена! –

1

Say вид вы создали называется newView и контроллером newController. Простой подход был бы:

newController.view = newView; 

Но я предпочел бы подкласс UIViewController и переопределить его - (void)loadView и - (void)viewDidLoad методы и создавать и/или манипулировать мнение есть - это путь Apple, хочет, чтобы вы это сделать, и навсегда причина.

+0

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

+0

Откуда у вас этот пользовательский вид? Разве вы не можете воссоздать его с нуля? Обратите внимание, что при перемещении подвью к новому представлению (например, новому контроллеру) он исчезнет из старого представления, поэтому вам лучше создать новое представление для нового контроллера. Если вы все еще хотите назначить существующий вид новому контроллеру, просто создайте новый контроллер как обычно, а затем вызовите 'newController.view = newView;', как я уже говорил. – MrMage