2015-11-14 1 views
0

Я создаю xib. Владелец файла xib - это набор для пользовательского класса с именем PackageTrackingListViewElement. У PackageTrackingListViewElement есть свойство IBOutlet, называемое, например, contentView. Несколько представлений в построителе интерфейса связаны с свойствами IBOutlet настраиваемого класса, который называется PackageTrackingListViewElement.Использование xib программной настройки IBOutlet и владельца файла приводит к ошибке с кодом, совместимым с кодировкой

Я пытаюсь инициализировать объект из xib.

PackageTrackingListViewElement *element2 = [[[NSBundle mainBundle] loadNibNamed:@"PackageTrackingListViewElementXib" owner:nil options:nil] objectAtIndex:0]; 

[element2.labelDate setText:@"12/14/15"]; 
[element2.labelLocation setText:@"Berkeley, California"]; 

После этого я добавить element2 объект в UIStackView.

Что я должен установить владельца файла вloadNibNamedтак, что я не получаю ошибку, что владелец XIb не ключ-значение соответствует для свойств я пытался получить доступ?

Моя ошибка [<UIStackView 0x165ddc80> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key contentView.' Когда я пытаюсь установить stackView как владельца xib. Я знаю, что это неправильно, но я не могу установить объект, который не был создан, чтобы быть его собственным владельцем. Я не понимаю, что делать.

+0

Что нужно сделать владельцем файла xib для того, чтобы сделать свойства этого класса доступными снаружи в контроллере представления? – stackOverFlew

ответ

3

Увы, понял. Большое спасибо Instantiating a UIView from a XIB file with itself as the file's owner?

Спасибо nebs

PackageTrackingListViewElement.h

#import <UIKit/UIKit.h> 

@interface PackageTrackingListViewElement : UIView 

@property (nonatomic,strong) IBOutlet UILabel *labelLocation; 

- (instancetype)initFromNib; 

@end 

PackageTrackingListViewElement.m

#import "PackageTrackingListViewElement.h" 

@implementation PackageTrackingListViewElement : UIView 

- (instancetype)initFromNib { 
    return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:nil options:nil] firstObject]; 
} 

@end 

Вы можете просто сделать:

PackageTrackingListViewElement *myView = [[PackageTrackingListViewElement alloc] initFromNib]; 


[myView.labelLocation setText:@"text"]; //access properties 

Используя процедуру создания экземпляра в приведенной выше ссылке, я получил свой экземпляр xib для работы. Я установил файловый владелец xib ничего (NSObject) и вместо этого установил корневой вид (выбрав представление в xib) в PackageTrackingListViewElement и соединил все выходы с этим представлением.

+1

Спасибо за это, хотя его чуть больше года! – JackyW