Загрузка пользовательского UIView в главном окне UIViewController - PullRequest
4 голосов
/ 26 ноября 2010

Я создал подкласс UIView и создал NIB, который управляет основной логикой для моего приложения.

Надеясь, что изображение будет хорошо масштабироваться, я хочу использовать его для версий приложения для iPhone и iPad.

На iPhone вид будет охватывать весь экран. На iPad вид будет покрывать только часть экрана.

Я прочитал, что вы не должны использовать UIViewControllers для управления только частью экрана. Итак, я пытаюсь встроить пользовательский UIView в основной вид UIViewController с помощью IB.

Как это можно сделать?

Ответы [ 2 ]

6 голосов
/ 30 ноября 2010

После долгих проб и ошибок я нашел решение, основанное на подходе, объясненном в следующем вопросе , на который ответил Брайан Вебстер .

Решение изначально было предложено для среды какао. Я надеюсь, что это действительно и в среде iOS.

  1. Создать контроллер основного вида с NIB-файлом. В NIB владелец файла должен соответствовать классу вашего основного контроллера вида.
  2. Создание пользовательского контроллера представления с NIB-файлом. В этом NIB владелец файла должен соответствовать классу вашего пользовательского контроллера представления.
  3. Создайте пользовательское свойство контроллера представления в вашем классе контроллера основного вида.
  4. Создать свойство UIView в классе контроллера основного вида. Он будет содержать представление вашего пользовательского контроллера представления. Определите его как IBOutlet, чтобы его можно было связать в NIB.
  5. Удалите UIView в NIB контроллера основного вида. Свяжите его с основным видом контроллера IBOutlet. Он будет использоваться в качестве заполнителя для пользовательского представления.
  6. В методе viewDidLoad контроллера основного вида загрузите NIB пользовательских контроллеров представления, определите размер кадра пользовательского представления и скопируйте представление в представлении контроллера основного представления.

Вот код:

  • MainViewController.h

    <code>@interface MainViewController : UIViewController {
      CustomViewController *customViewController;
      UIView *customView;
    }
    @property (nonatomic, retain) CustomViewController *customViewController;
    @property (nonatomic, retain) IBOutlet UIView *customView;
    @end
  • MainViewController.m

    <code>- (void)viewDidLoad {
      CustomViewController *controller = [[CustomViewController alloc] initWithNibName:@"CustomViewController" bundle:nil];
      self.customViewController = controller;
      [controller release];
      customViewController.view.frame = customView.frame;
      customViewController.view.autoresizingMask = customView.autoresizingMask;
      [customView removeFromSuperview];
      [self.view addSubview:customViewController.view];
      self.customView = customViewController.view;
      [super viewDidLoad];
    }
    
1 голос
/ 26 ноября 2010
  1. Добавьте свойство IBOutlet для вашего пользовательского UIView в UIViewController и дополнительные выходы для любых подпредставлений, к которым вы хотите получить доступ.
  2. Перейдите в Interface Builder, выберите объект "Владелец файла" в вашемNIB и в Инспекторе перейдите на крайнюю правую вкладку и установите его класс в соответствии с классом вашего UIViewController.
  3. Подключите IBOutlet с первого шага "Владельца файла" к своему пользовательскому UIView.
  4. В XCode,когда вам нужно загрузить вид, сделайте что-то вроде этого:

-

   [[NSBundle mainBundle] loadNibNamed:@"MyNib" owner:self options:0];
   self.myCustomView.frame=self.view.bounds; // make view fill screen - customize as necessary
   [self.view addSubview:self.myCustomView];

Когда вы загружаете NIB, розетка (и), которую вы настроили на шаге 1будет заполнен объектами, загруженными из вашей NIB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...