#iphone #objective-c #uiview #delegates
#iPhone #objective-c #uiview #делегаты
Вопрос:
Сначала загружается UIView
из UIViewController
myView *bso =[[myView alloc] init];
bso.assignProperty = object;
[self.view addSubview:bso];
MyView.m
-(id) init{
return [[[NSBundle mainBundle] loadNibNamed:@"MyXib" owner:self options:nil] objectAtIndex:0];
}
при нажатии на кнопку UIView свойство равно нулю
- (IBAction)click:(id)sender{
self.assignProperty // always is nil
}
если я сделаю то же самое с UIViewController
вместо UIView
, тогда он будет работать отлично.
Спасибо
Ответ №1:
Вы не должны возвращать это из init
; попробуйте:
-(id) init{
if ((self = [super init])) {
[[NSBundle mainBundle] loadNibNamed:@"MyXib" owner:self options:nil];
}
return self;
}
Или, в качестве альтернативы, удалите init
метод из myView
и вместо вашего верхнего кода выполните:
myView *bso = nil;
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyXib" owner:self options:nil];
for (id o in nib) {
if ([o isKindOfClass:[myView class]]) {
bso = o;
break;
}
}
if (bso) {
bso.assignProperty = object;
[self.view addSubview:bso];
} else {
NSLog(@"ERROR: Could not load bso!");
}
Также обратите внимание, что вызов вашего класса myView
сбивает с толку — программисты Obj-C ожидают, что классы будут начинаться с заглавной буквы.
Комментарии:
1. Если я не верну
[[NSBundle mainBundle] loadNibNamed:@"MyXib" owner:self options:nil];
, не загружайте xib. Проблема заключается в том, что при щелчке в IBAction из UIView