Метод Interface Builder создает «высушенные сублимацией» объекты, которые воссоздаются во время выполнения при инициализации объекта из NIB. Он по-прежнему выполняет те же действия alloc
и init
, используя объекты NSCoder
для переноса объектов в память.
Если вы хотите иметь контроллер представления на основе определенного NIB, вы можете переопределить метод init по умолчанию и инициировать его на основе NIB для этого контроллера представления. Например:
@implementation MyViewController
-(id) init {
if (self = [super initWithNibName:@"MyViewController" bundle:nil]) {
//other setup stuff
}
return self;
}
И когда вы хотите отобразить MyViewController
, вы просто позвоните примерно так:
- (void) showMyViewController {
MyViewController *viewController = [[[MyViewController alloc] init] autorelease];
[self presentModalViewController:viewController animated:YES];
}
Теперь, если вы хотите создать представление вручную, а не в Интерфейсном Разработчике, вам совсем не нужно менять метод -showMyViewController
. Избавьтесь от переопределения -init
и вместо этого переопределите метод -loadView
вашего MyViewController
, чтобы создать его программно:
- (void) loadView {
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(320,460)];
self.view = view;
[view release];
//Create a button
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[myButton addTarget:self action:@selector(pressedButton) forControlEvents:UIControlEventTouchUpInside];
[myButton setTitle:@"Push Me!" forState:UIControlStateNormal];
myButton.frame = CGRectMake(100,230,80,44);
[self.view addSubview:myButton];
}
В этом примере показано, как создать представление и добавить к нему кнопку. Если вы хотите сохранить ссылку на нее, объявите ее так же, как если бы вы использовали NIB (без IBOutlet / IBActions) и используйте self
при назначении. Например, ваш заголовок может выглядеть так:
@interface MyViewController : UIViewController {
UIButton *myButton;
}
- (void) pressedButton;
@property (nonatomic, retain) UIButton *myButton;
@end
А твой класс:
@implementation MyViewController
@synthesize myButton;
- (void) loadView {
//Create the view as above
self.myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[myButton addTarget:self action:@selector(pressedButton) forControlEvents:UIControlEventTouchUpInside];
[myButton setTitle:@"Push Me!" forState:UIControlStateNormal];
myButton.frame = CGRectMake(100,230,80,44);
[self.view addSubview:myButton];
}
- (void) pressedButton {
//Do something interesting here
[[[[UIAlertView alloc] initWithTitle:@"Button Pressed" message:@"You totally just pressed the button" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK",nil] autorelease] show];
}
- (void) dealloc {
[myButton release];
[super dealloc];
}