UIViewController si UINavigationController

Introducere

Programarea în iOS este bazată foarte mult pe patternul MVC (“Model View Controller”). Astfel, implementarea modelului, view-ului şi a controlerului sunt separate. Modelul este responsabil de date şi controlerul este legătura între View şi Model.

UIViewController

Am lucrat până acum cu această clasă: UIViewController. Este clasa responsabilă de un View. De fiecare dată când un View are parte de un eveniment (apăsarea unui buton, de exemplu) o anumită metodă din Controller este apelată. Legările din Storyboard pe care le realizăm faceau legătura dintre Controller şi View.

De obicei se moşteneşte UIViewController şi se crează un UIViewController custom.

Câteva metode utile ale clasei UIViewController

  • - (void)viewWillAppear:(BOOL)animated
    • se apelează când view-ul urmează să fie adăugat ierarhiei de view-uri
  • - (void)viewDidAppear:(BOOL)animated
    • se apelează după ce view-ul a fost adăugat ierarhiei de view-uri
  • - (void)viewWillDisappear:(BOOL)animated
    • se apelează când view-ul urmează să fie scos din ierarhia de view-uri
  • - (void)viewDidDisappear:(BOOL)animated
    • se apelează după ce view-ul a fost scos din ierarhia de view-uri
  • - (void)viewWillLayoutSubviews
    • se apelează metoda când view-ul controlerului urmează să alinieze subview-urile
  • - (void)viewDidLayoutSubviews
    • se apelează metoda când view-ul controlerului a aliniat subview-urile

În concluzie, un UIViewController are un UIView principal. Dar ce se întamplă în momentul în care aplicaţia noastră are mai multe view-uri? Nu se obişnuieşte ca un UIViewController să aibă asociat mai mult de unul. Înseamnă că aplicaţia ar trebui să aibe mai multe UIViewControllere, unul pentru fiecare View principal al aplicaţiei. Dar cum trecem dintr-un UIViewController în altul? Raspunsul este: UINavigationController

UINavigationController si UITabBarController

UINavigationController este o stivă de Controllere. Următoarele metode sunt folosite pentru a gestiona ViewControllerele într-un UINavigationController:

-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
-(void)popViewController:(UIViewController *)viewController animated:(BOOL)animated

Când apăsăm General din Settings, se face push view controllerului responsabil de setările generale. În momentul în care apăsăm Auto-Lock se face push view controllerului responsabil de aceste setări. Dacă facem back din Auto-Lock, se apelează pop la View Controllerul responsabil de setările Auto-Lock şi se revine la View Controllerul cu setări generale.

În momentul când ajungem la imaginea 3, stiva conţine următoarele elemente:

Auto-Lock View Controller
General View Controller
Settings View Controller

În Navigation Bar, observăm un UILabel ce conţine title-ul View Controlerului. Butonul de “back” are numele title-ului View Controllerului anterior.

Un alt tip de Navigation Controller este: UITabBarController. Spre deosebire de UIViewController, UITabBarController nu este o stivă de ViewControllere ci mai degrabă o listă, un array. Utilizatorul are un tab bar din care poate selecta ce View Controller va fi afişat.

Metode şi proprietăţi utile pentru a crea şi gestiona un UITabBarViewController:

  • - (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated;
    • metoda ce seteaza colecţia de View Controllere ce vor fi conţinute în Tab Bar
  • @property(nonatomic, copy) NSArray *viewControllers;
    • proprietate ce conţine colecţia cu View Controllere ţinute de Tab Bar
  • @property(nonatomic, assign) UIViewController *selectedViewController;
    • proprietate cu View Controllerul selectat
  • @property (nonatomic) NSUInteger selectedIndex;
    • proprietate asociată indexului View Controllerului selectat din array
programare_ios/curs/curs5.txt · Ultima modificare: 2013/07/28 16:39 de către bogdan.vlad
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0