Я нахожусь в процессе создания инфраструктуры для внутреннего использования и сталкиваюсь с проблемами создания гибкого контроллера представления с настраиваемым представлением.
Цель состоит в том, чтобы иметь реализацию, аналогичную UITableViewController
:
- Если контроллер представления инициализируется с помощью пера (или, если обнаружен перо с тем же именем), он использует определенные в нем выходы для определения своего вида. Разработчик должен убедиться, что используется правильный подкласс
UIView
.
- Если контроллер представления инициализируется без кончика (или если кончик не может быть найден), он создает свое собственное представление, используя правильный подкласс
UIView
.
В качестве первого удара я переопределил -loadView
, чтобы создать собственное представление. Это то, что вы бы сделали, если бы вас не интересовали перья, и это прекрасно работает. Однако, если я пытаюсь загрузить перо (например, -initWithNibNamed:bundle:
), выполняется метод -loadView
, и перо игнорируется.
Я также пытался использовать -nibName
, чтобы определить, было ли передано имя пера, и это ЧАСТИЧНО работает, но не работает, если передано nil
(что все еще допустимо, и должно абсолютно работать, если есть перо с тем же именем, что и контроллер вида).
Имейте в виду, что я создаю фреймворк, который будет использоваться другими разработчиками. Ключевые слова: «гибкий» и «надежный».
Любая помощь была бы больше, чем сейчас. Большое спасибо.
Редактировать: Решено
Как указывалось в предложении @ bunnyhero, приведенном ниже, проверка доступности пера во время -loadView
и попытка воссоздать его реализацию по умолчанию оказались полезными. Я остановился на чем-то вроде этого:
- (void)loadView {
NSString *nib = self.nibName;
NSBundle *bundle = self.nibBundle;
if(!nib) nib = NSStringFromClass([self class]);
if(!bundle) bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:nib ofType:@"nib"];
if(path) {
[bundle loadNibNamed:nib owner:self options:nil];
return;
}
// Create custom view programmatically here.
}
Спасибо @ bunnyhero