Статьи

Разработка приложений для iPhone — Просмотр контроллеров

В этой статье мы рассмотрим View Controller и его жизненный цикл.

Что такое View Controller?

Контроллеры представления выполняют логику вашего приложения и помогают в управлении представлениями и данными в вашем приложении.

Базовый класс для всех контроллеров в iOS — UIViewController . Итак, пользовательские контроллеры, которые мы создаем в нашем приложении, также должны быть подклассом UIViewController .

UIViewController всегда будет иметь ссылку на UIView верхнего уровня.

 @property(nonatomic,retain) UIView *view; 

Вы можете найти вышеуказанную строку в заголовочном файле UIViewController . Нажмите cmd а затем нажмите на UIViewController в XCode, чтобы получить доступ к заголовочному файлу.

Специальные контроллеры вида

В iOS SDK есть определенные специальные контроллеры представления, которые управляют коллекцией контроллеров. Мы можем использовать эти контроллеры для создания стандартных пользовательских интерфейсов iOS.

UINavigationController

Управляет навигационным или иерархическим потоком MVC. Контроллеры расположены в виде стека.

Пример: настройки приложения в iPhone.

Когда вы нажимаете любую опцию настроек, она переходит на следующую страницу. Внутренне вы помещаете контроллер представления в стек.

UINavigationController

UINavigationController2

UITabBarController

Управляет коллекцией MVC. Вкладки будут отображаться в нижней части экрана, и каждая вкладка соответствует одному MVC. Отображает только один MVC одновременно.

Пример: приложение Фотографии

Проверьте на вкладках в нижней части экрана.

UITabBarController

UISplitViewController

Управляет двумя MVC одновременно. Он содержит мастер и контроллер детального просмотра. Экран разделен на две части для отображения двух контроллеров. Этот контроллер предназначен только для iPad.

Пример: приложение настроек iPad

UISplitViewController

Жизненный цикл View Controller

Следующие методы формируют жизненный цикл View Controller.

Жизненный цикл начинается со следующего метода инициализации.

initWithNibName: расслоение

  • Инициализатор по умолчанию контроллера представления.
  • NSBundle объект обозначает местоположение в файловой системе, где хранятся ресурсы приложения, такие как файлы изображений, файлы перьев, исполняемые файлы, файлы локализации и т. Д.
  • nibName представляет файл построителя интерфейса (.xib), соответствующий контроллеру.
  • Bundle представляет расположение файла пера
  • Таким образом, UIViewcontroller пытается получить представление из файла nib или xib. Если имя пера равно nil, оно использует имя контроллера в качестве имени пера, а если пакет равен nil, он ищет файл пера в папке ресурсов.
 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if(self != nil) { // Any other initialization } return self; } 

Loadview

Контроллер View вызывает этот метод, когда запрашивается свойство view, и оно равно nil.

Реализация представления нагрузки по умолчанию выполняет одно из следующих действий.

  • Загружает вид из раскадровки или файла пера
  • Если нет файла пера или раскадровки, он создает пустой объект UIView и назначает его свойству view контроллера представления

Мы можем переопределить представление загрузки и установить наши собственные пользовательские представления в качестве представления контроллера представления. Но не вызывайте метод super из переопределенного метода представления загрузки, так как супер класс выполнит реализацию по умолчанию, которая не требуется.

 - (void)loadView { // Set your custom view CustomView *cView = [[CustomView alloc] initWithFrame:CGRectZero]; cView.backgroundColor = [UIColor whiteColor]; self.view = cView; } 

viewDidLoad

  • После создания экземпляра и установки выходов viewDidLoad метод viewDidLoad .
  • Как правило, мы дадим суперклассу возможность выполнить любую дополнительную настройку во всех методах жизненного цикла, приведенных ниже.
  • Здесь написан весь ваш начальный код настройки.
  • Помните, что геометрия вида не установлена ​​в этом методе. В этом методе геометрия вида берется из раскадровки или файла пера. Но устройство и его фактическая ориентация могут быть разными. Так что не делайте здесь вещи, связанные с геометрией.
  • Он вызывается только один раз до тех пор, пока ваше представление не будет освобождено.
 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } 

ViewWillAppear

Это вызывается непосредственно перед тем, как вид появляется на экране. Анимированная переменная указывает, хотите ли вы, чтобы представление отображалось мгновенно или анимированным образом.

Ваш вид может появляться и исчезать столько раз в вашем приложении. Таким образом, этот метод вызывается каждый раз, когда ваше представление собирается появиться на экране.

Здесь можно выполнить инициализацию, связанную с геометрией, и код для обновления представления на основе изменений в других экранах или изменений данных.

 -(void) viewWillAppear:(BOOL)animated { [super viewWillAppear:YES]; } 

ViewWillDisappear

Это вызывается непосредственно перед тем, как вид исчезнет с экрана.

Код для сохранения данных в представлении или сохранения состояния представления можно написать здесь. Очистить код, если требуется, также можно сделать здесь.

Помните, что все эти методы не требуют затрат времени и средств.

 -(void) viewWillDisappear:(BOOL)animated { [super viewWillDisappear:YES]; } 

ViewDidAppear и viewDidDisappear

Как видно из названия, эти два метода вызываются сразу после того, как представление появляется или исчезает с экрана.

 - (void)viewDidAppear:(BOOL)animated; - (void)viewDidDisappear:(BOOL)animated; 

Автоматический поворот

Когда устройство поворачивается, контроллер представления верхнего уровня также должен иметь свои границы, переориентированные на ориентацию устройства.

Следующие шаги могут сделать это.

Контроллер представления должен вернуть YES в методе shouldAutorotate .

 -(BOOL) shouldAutorotate { return YES; } 

Поддерживаемые supportedOrientations должны быть определены в контроллере представления.

 - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } 

Приложение также должно разрешать поворот в направлениях, которые могут быть указаны в файле info.plist

info.plist

Всякий раз, когда вращение произойдет или произойдет, будут запущены следующие уведомления

 - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration; - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation; 

Мы можем указать расположение вложенных представлений в этом методе. Это также можно сделать с помощью метода Autolayout, который поможет нам определить макет вложенных видов с помощью ограничений макета.

didReceiveMemoryWarning

Когда приложению не хватает памяти, контроллер представления будет уведомлен с помощью этого метода, и этот метод будет запущен.

Если вы используете слишком много изображений или мультимедийных файлов в вашем приложении, и если все эти файлы находятся в памяти, это может произойти. Если эти файлы не используются и если они могут быть созданы заново, мы должны установить указатель на эти файлы как nil.

 - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } 

Вывод

Теперь у вас есть понимание View Controllers, мы обсудим некоторые примеры в моей следующей статье.