Если я создаю отдельный файл пера, загружаю его в свой viewcontroller и назначаю его для ивара следующим образом:
self.loadingview=[[[NSBundle mainBundle] loadNibNamed:@"loading" owner:self options:nil] objectAtIndex:0];
Можно ли создать IBOutlets для какой-либо вещи в ней, например индикаторов активности? Будет ли Владелец Файла viewcontroller, даже если IB не узнает об этом, поскольку он сделан объектом в коде?
Является ли загрузка пера, как я это сделал, приемлемой практикой?
Возможно, более приемлемой практикой является также создание .h / .m и использование его в качестве класса для XIB, и в этом случае владельцем файла является новый пользовательский класс; Мне все еще нужно использовать вышеуказанный метод в моем контроллере, хотя, при создании ivar из пользовательского класса, верно? Или есть лучший способ сделать все это, не используя xib контроллера?
ОБНОВЛЕНИЕ: Основываясь на некоторых ответах, я сделал следующее. Я избавился от метода NSBundle
, описанного выше, и вместо этого просто сделаю это:
@property (nonatomic, retain) IBOutlet UIView*loadingview;
В файле пера для этого представления я нажимаю на Владелец файла и заменяю Custom Class
на мой viewcontroller. Затем я перетаскиваю элемент управления «Владелец файла» в представление, и он прекрасно связывается.
В этот момент я бы предположил, что у меня в контроллере есть ивар, self.loadingview
, содержащий информацию в кончике. Однако это не тот случай. Я удалил метод NSBundle, предполагая, что контроллер теперь будет загружать наконечник напрямую через выход IB, но вид в наконечнике не отображается, и я не контролирую его в контроллере.
Я также удалил это, когда удалил метод NSBundle:
[self.view addSubview:self.loadingview];
Мне не ясно, как на самом деле отображается представление в этой точке; и если это произойдет, то, где в представлении heirarchy это появляется? возможно это позади других взглядов. Я тоже это попробовал:
[self.view bringSubviewToFront:self.loadingview];
Но вид просто не существует. Чтобы найти его, я сделал:
//[self.view bringSubviewToFront:self.loadingview];
NSLog(@"index: %i",[[self.view subviews]indexOfObject:self.loadingview]);
как с комментируемой частью, так и без нее. Я получаю это:
index: 2147483647