La risposta accettata è fuorviante. awakeFromNib verrà sempre chiamato, non solo se viene utilizzato un pennino. Dalla documentazione di mele:
awakeFromNib:
prepara il ricevitore per il servizio dopo che è stato caricato da un archivio di Interface Builder, o un file pennino.
Link
Nel prossimo esempio ho usato solo uno storyboard È possibile verificare questo molto facilmente.
Questa è la nostra ViewController:
ViewController.m:
#import "ViewController.h"
@interface ViewController()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"viewDidLoad");
}
-(void)awakeFromNib
{
NSLog(@"awakeFromNib in view controller");
}
@end
RedView.m:
#import "RedView.h"
@implementation RedView
-(void)awakeFromNib
{
NSLog(@"awakeFromNib inside RedView");
self.green.hidden = YES;
}
@end
Ordine di stampa:
- awakeFromNib in vista del regolatore
- awakeFromNib all'interno Redview
- viewDidLoad
E naturalmente la vista verde sarà nascosto.
Edit:
awakeFromNib non sarà chiamato se si utilizza solo il codice per creare la vostra vista, ma si può chiamare se stessi o, meglio ancora, creare il proprio metodo.
Esempio senza StoryBoard (solo codice):
RedView.m:
#import "RedView.h"
@implementation RedView
-(void)loadRedView
{
NSLog(@"loadRedView");
self.green = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
self.green.backgroundColor = [UIColor greenColor];
[self addSubview:self.green];
self.green.hidden = YES;
}
@end
ViewController.m:
#import "ViewController.h"
@interface ViewController()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.red = [[RedView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
self.red.backgroundColor = [UIColor redColor];
[self.view addSubview:self.red];
[self.red loadRedView];
}
@end
se il tuo UIView è "creato programmaticamente, in seguito", rimuovi la sottoview a questo punto –
Voglio che tutto il codice relativo a UIView, si trovi nella classe di UIView – Luda
La risposta accettata è fuorviante. Ho aggiunto una risposta più dettagliata. – Segev