UIViewController и XIB вопрос - PullRequest
       0

UIViewController и XIB вопрос

1 голос
/ 10 августа 2011

Как мне запретить UIVIewController загружать xib?

Я скачал проект XCode (iPhone) онлайн и хочу остановить загрузку xib-файла. В методе загрузки с загрузкой нет кода, который имеет дело с xib. Как заставить UIViewController загружаться из его метода viewDidLoad вместо xib?

Ответы [ 5 ]

3 голосов
/ 10 августа 2011

Перезаписать loadview, но НЕ вызывать [super loadview]. Пример:

-(void)loadView{
    self.view = [UIView new];
    [self.view setBackgroundColor:[UIColor redColor]];
}

Из документации

loadView

Создает представление, которым управляет контроллер.

Вы никогда не должны вызывать этот метод непосредственно. Контроллер представления вызывает этот метод, когда свойство view запрашивается, но в настоящее время ноль. Если вы создаете свои виды вручную, Вы должны переопределить этот метод и использовать его для создания своих представлений. если ты используйте Interface Builder для создания ваших представлений и инициализации представления контроллер, то есть вы инициализируете представление, используя initWithNibName: bundle: метод, установите nibName и nibBundle свойства, или создайте ваши представления и контроллер представления в Интерфейсный Разработчик - тогда вы не должны переопределять этот метод.

Реализация по умолчанию этого метода ищет допустимое перо информация и использует эту информацию для загрузки соответствующего файла пера. Если информация пера не указана, реализация по умолчанию создает простой объект UIView и делает его основным видом.

Если вы переопределите этот метод для создания ваших представлений вручную, Вы должны сделать это и назначить корневой вид вашей иерархии просмотреть недвижимость. (Представления, которые вы создаете, должны быть уникальными не должен использоваться совместно с любым другим объектом контроллера представления.) Ваш Пользовательская реализация этого метода не должна вызывать super.

Если вы хотите выполнить дополнительную инициализацию ваших представлений, выполните так в методе viewDidLoad. В iOS 3.0 и выше, вы также должны переопределить метод viewDidUnload, чтобы освободить любые ссылки на просмотреть или его содержимое.

0 голосов
/ 10 августа 2011

Возможно, я лаю здесь не то дерево, но загружает ли UIViewController свое представление из XIB, потому что у XIB, который загружает сам UIViewController, в настройках контроллера представления установлено «Имя NIB»?* Например, загрузите MainWindow.xib, смотрите ваш контроллер представления.Выберите его, затем посмотрите в окне настроек контроллера справа (4-я вкладка).Одной из настроек является «Имя NIB».Просто оставьте это поле пустым, чтобы контроллер представления не загружал свое представление из этого XIB / NIB.

0 голосов
/ 10 августа 2011

Напишите свой собственный метод инициализации.Позже, если вам потребуется перо, вы можете создать объект UINib, а когда вам нужно представление, вы можете использовать instantiateWithOwner.

Использование init при создании контроллера представления предотвратит загрузку кончика.Другая вещь, которую нужно сделать, - это назвать перо как-то иначе, чем имя контроллера представления - потому что перо может быть загружено автоматически, если они совпадают.Я использую ViewControllerName_iPad или ViewControllerName_iPhone и создаю требуемый вид в зависимости от типа устройства.

0 голосов
/ 10 августа 2011

Код для загрузки из файла xib отсутствует в методе viewDidLoad самого контроллера представления.

Обычно его нужно найти в методе didFinishLaunchingWithOptions: делегата приложения или в информации.файл plist, под NSMainNibFile записью.

0 голосов
/ 10 августа 2011

Попробуйте изменить метод initWithNibNameOrNil на init. Если это не сработает, переопределите метод loadView, раскомментировав его и установив там свой вид.

Вот пример:

    - (id)init
    {
        self = [super init];
        if (self) {
            // Custom initialization
        }
        return self;
    }

    - (void)loadView {
    [super loadView];
    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,460)];
    myView.backgroundColor = [UIColor redColor];

    self.view = myView;
    [myView release];
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...