SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
squeek school

                             Разработка приложений для iOS
                                       занятие #4




суббота, 30 апреля 2011 г.
View Controller
                      • Управляет содержимым экрана
                      • Наследуй от UIViewController, чтобы
                               определить свою логику
                              “Your” and “Our” View Controllers
Your” and “Our” View Controllers
                      • Несколько ViewController-ов могут
                                               • Create your
Create your own UIViewController subclass for each screenful own UIViewController subclass for each s
                               совмещаться     • Plug them together using existing composite view co
 lug them together using existing composite view controllers


                                                                                 View Controller
                                     View Controller
                       Navigation                                Tab Bar
                                       View Controller                           View Controller
                       Controller                               Controller
                                         View Controller
                                                                                 View Controller


  суббота, 30 апреля 2011 г.
свой ViewController
       #import <UIKit/UIKit.h>
       @interface MyViewController : UIViewController {
                             Creating Your View in Code
       NSMutableArray *myData;
       UILabel *myLabel;
                      • Override -loadView
       }                 ■       Never call this directly
                      • Create your views
       @property (readonly) NSArray *myData;
       - (void)doSomeAction:(id)sender;
                      • Set the view property
                             • Create view controller with -init

                              // Subclass of UIViewController
                              - (void)loadView
                              {
                                MyView *myView = [[MyView alloc] initWithFrame:frame];
                               view объявлен в UIViewController
                                self.view = myView; // The view controller now owns the view
                                [myView release];
                              }



суббота, 30 апреля 2011 г.
свой ViewController
           - (void)loadView {
           MyView *myView = [[MyView alloc] initWithFrame:frame];
           self.view = myView;
           [myView release];
           }




суббота, 30 апреля 2011 г.
свой ViewController Builder
                              Creating Your View with Interface
                                             • Lay out a view in Interface Builder
                                             • File’s owner is view controller class
                                             • Hook up view outlet

                    • File - New File - View Controller
                                             • Create view controller
                                                with -initWithNibName:bundle:


                    • автоматическое создание nib-файла
                    • создание нового объекта viewController
                             при помощи -initWithNibName:bundle:

                                     Friday, January 22, 2010




суббота, 30 апреля 2011 г.
Навигация
             • UINavigationController

             • UITabBarController

             • UIScrollView


суббота, 30 апреля 2011 г.
UINavigationController
                           UINavigationController
                                                  UINavigationController
                                                               • Stack of view controllers
                                                    • Stack of view controllers
                                                               • Navigation bar
                                                    • Navigation bar

                                                                                   View Controller
                                                                        View Controller
                                                               Navigation             View Controller
                                                    Navigation Controller View Controller
                                                    Controller                          View Controller
                                                                            View Controller




                     Thursday, January 28, 2010                                                           5
    Thursday, January 28, 2010                                                                5




суббота, 30 апреля 2011 г.
управление набором
                         ViewController
                   - (void)pushViewController:(UIViewController *)viewController
                animated:(BOOL)animated;

                !!!вызывается retain


                - (UIViewController *)popViewControllerAnimated:(BOOL)animated;

                pop обычно не вызывается, автоматически при нажатии ‘<-’




суббота, 30 апреля 2011 г.
первый ViewController

          - (void)applicationDidFinishLaunching
          }
             navController = [[UINavigationController alloc] init];

                 [navController pushViewController:firstViewController animated:NO];

                 [window addSubview:navController.view];
          }




суббота, 30 апреля 2011 г.
а как использовать?
     - (void)someAction:(id)sender {
     }

           UIViewController *viewController = ...;
           [self.navigationController pushViewController:viewControlle animated:YES];
     }




суббота, 30 апреля 2011 г.
посмотрим?




          •New Window-Based app
          •Новый ViewController с кнопкой
          •NavigationController и FirstViewController в AppDelegate
          •SecondViewController
          •Cвойство title у ViewController
суббота, 30 апреля 2011 г.
как связать все
                                     ViewController?
                                Best Practices for Data Flow
                    • Не стоит использовать глобальные
                       •          Figure out exactly what needs to be communicated
                             переменные или AppDelagate
                                • Define input parameters for your view controller

                    • Что нужно на входе следующему
                             ViewController? (и только это!)
                                                                  Data

                                                       List           Detail
                                                     Controller     Controller


                   • В обратную сторону - используя делегаты
                             (с помощью протоколов)
                        Thursday, January 28, 2010                                   16

суббота, 30 апреля 2011 г.
Customizing Navigation
                         бонусы к навигации
                   • Buttons or custom controls
                   • Interact with the entire screen




         Thursday, January 28, 2010                    20




суббота, 30 апреля 2011 г.
UINavigationTitle
                    • Содержится у любогоOwnership
                           Navigation Item ViewController


                                                                   Left Bar
                                                                 Button Item



                             View Controller   Navigation Item    Title View



                                                                  Right Bar
                                                                 Button Item




суббота, 30 апреля 2011 г.
кнопки справа и слева

                    • UIBarButtonItem отображается сверху
                    • Отображает строку, изображение
                    • Target + Action (как и во всех кнопках)


суббота, 30 апреля 2011 г.
создание
                     UIBarButtonItem
                            - (void)viewDidLoad {
                               UIBarButtonItem *fooButton = [[UIBarButtonItem alloc]
                               initWithTitle:@"Foo”
  Text Bar Button Item         style:UIBarButtonItemStyleBordered
                               target:self
                               action:@selector(foo:)];

                                self.navigationItem.leftBarButtonItem = fooButton;
                                [fooButton release];
    - (void)viewDidLoad
    {                         }
      UIBarButtonItem *fooButton = [[UIBarButtonItem alloc]
                           - (void)viewDidLoad {
         initWithTitle:@"Foo”
  System Bar Button Item      UIBarButtonItem *addButton = [[UIBarButtonItem alloc]
         style:UIBarButtonItemStyleBordered
                              initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
         target:self
                              style:UIBarButtonItemStyleBordered
         action:@selector(foo:)];
                              target:self
                              action:@selector(add:)];
      self.navigationItem.leftBarButtonItem = fooButton;

            [fooButton release];     self.navigationItem.rightBarButtonItem = addButton;
        - (void)viewDidLoad          [addButton release];
       }{                            }
            UIBarButtonItem *addButton = [[UIBarButtonItem alloc]
                initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
суббота, 30 апреля 2011 г.
кнопка
        редактирования
Edit/Done Button
               •
• Very common pattern практика
          реализованная
• Every view controller has one available
      ■   Target/action already set up


  self.navigationItem.leftBarButtonItem = self.editButtonItem;
      self.navigationItem.leftBarButtonItem = self.editButtonItem;


  // Called when the user toggles the edit/done button
  - (void)setEditing:(BOOL)editing animated:(BOOL)animated
      - (void)setEditing:(BOOL)editing animated:(BOOL)animated {
      }
  {
    // Update appearance of views
  }

суббота, 30 апреля 2011 г.
Custom Title View   вместо надписи
                • Arbitrary view in place of the title



                       UISegmentedControl *segmentedControl = ...
                       self.navigationItem.titleView = segmentedControl;
                       [segmentedControl release];




      Thursday, January 28, 2010                                           28


суббота, 30 апреля 2011 г.
Скрыть клавиатуру

                    • подписаться на делегат у textField
                    • подписаться на событие -(BOOL)
                             textFieldShouldReturn:(UITextField *)
                             textField;
                    • [textField resignFirstResponder];

суббота, 30 апреля 2011 г.
Дата в строку и
                                обратно
           • NSDateFormatter *formatter =
                   [[NSDateFormatter alloc] init];
           • [formatter setDateFormat:@”DD-MM-YYYY”];
           • NSDate *date = [formatter
                   dateFromString:string];
           • NSString *string = [formatter
                   stringFromDate:date];


суббота, 30 апреля 2011 г.
UITabBarController
                                     UITabBarController
                                                        UITabBarController
                                                        • Array of view controllers
                                                        • Tab bar
                                                      • Array of view controllers
                                                      • Tab bar
                                                                            View Controller

                                                           Tab Bar
                                                                            View Controller
                                                          Controller

                                                                            View Controller

                                                        Tab Bar
                                                       Controller


                         Thursday, January 28, 2010                                           32




суббота, 30 апреля 2011 г.
используем
                             UITabBarController
- (void)applicationDidFinishLaunching
{
  tabBarController = [[UITabBarController alloc] init];

     NSArray *myViewControllers = [NSArray
     arrayWithObjects:someViewController, nil];

     tabBarController.viewControllers = myViewControllers;

     [window addSubview:tabBarController.view];
}

суббота, 30 апреля 2011 г.
добавляем картинку и
                             надпись
                 Creating Tab Bar Items
                    • Title and image



                           - (void)viewDidLoad
                           {
                             UITabBarItem *item = [[UITabBarItem alloc]
                                                 initWithTitle:@“Playlists”
                                                 image:[UIImage imageNamed:@“music.png”]
                                                 tag:0];
                             self.tabBarItem = item;
                             [item release];
                           }




             Thursday, January 28, 2010
суббота, 30 апреля 2011 г.                                                             36
стандартный набор
                             Creating Tab Bar Items
                             • System item



                                - (void)viewDidLoad
                                {
                                  UITabBarItem *item = [[UITabBarItem alloc]
                                                      initWithTabBarSystemItem:
                                                        UITabBarSystemItemBookmarks
                                                      tag:0]
                                  self.tabBarItem = item;
                                  [item release];
                                }




                 Thursday, January 28, 2010                                           37

суббота, 30 апреля 2011 г.
ollers
                          а если слишком
                      More View Controllers
                      •          много?
b bar controller has too many a tab bar controller has too many
            What happens when
y at once? view controllers to display at once?
                              ■ “More” tab bar item
                                displayed automatically
                              ■ User can navigate to

                                remaining view controllers




            Thursday, January 28, 2010                            39
 суббота, 30 апреля 2011 г.                                  39
Tab Bar + Navigation Controllers
                                   Multiple parallel hierarchies




      Thursday, January 28, 2010                                   41
суббота, 30 апреля 2011 г.
архитектура
                                 Tab Bar + Navigation Controllers


                                                    Navigation
                                                    Controller      View Controller


                                                    Navigation
                             Tab Bar Controller     Controller      View Controller


                                                  View Controller




суббота, 30 апреля 2011 г.

Más contenido relacionado

Similar a Squeek school 4

занятие 2
занятие 2занятие 2
занятие 2ajantis
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersГлеб Тарасов
 
#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектах#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектахe-Legion
 
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. ControllersИнтуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. ControllersГлеб Тарасов
 
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOSОмские ИТ-субботники
 
Viper - чистая архитектура iOS-приложения (И. Чирков)
Viper - чистая архитектура iOS-приложения (И. Чирков)Viper - чистая архитектура iOS-приложения (И. Чирков)
Viper - чистая архитектура iOS-приложения (И. Чирков)65apps
 
iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKitNoveo
 

Similar a Squeek school 4 (8)

занятие 2
занятие 2занятие 2
занятие 2
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
 
#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектах#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектах
 
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. ControllersИнтуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
 
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
 
Squeek School #7
Squeek School #7Squeek School #7
Squeek School #7
 
Viper - чистая архитектура iOS-приложения (И. Чирков)
Viper - чистая архитектура iOS-приложения (И. Чирков)Viper - чистая архитектура iOS-приложения (И. Чирков)
Viper - чистая архитектура iOS-приложения (И. Чирков)
 
iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKit
 

Más de Sergey Pronin

App in the Air Internship 2018
App in the Air Internship 2018App in the Air Internship 2018
App in the Air Internship 2018Sergey Pronin
 
Things you might have missed from CoreData
Things you might have missed from CoreDataThings you might have missed from CoreData
Things you might have missed from CoreDataSergey Pronin
 
Департамент Программной Инженерии
Департамент Программной ИнженерииДепартамент Программной Инженерии
Департамент Программной ИнженерииSergey Pronin
 
Mera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-CMera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-CSergey Pronin
 
Empatika Design Hours
Empatika Design HoursEmpatika Design Hours
Empatika Design HoursSergey Pronin
 
Greenfield Feedback Squeek
Greenfield Feedback SqueekGreenfield Feedback Squeek
Greenfield Feedback SqueekSergey Pronin
 

Más de Sergey Pronin (15)

App in the Air Internship 2018
App in the Air Internship 2018App in the Air Internship 2018
App in the Air Internship 2018
 
PTA Ancillaries
PTA AncillariesPTA Ancillaries
PTA Ancillaries
 
Things you might have missed from CoreData
Things you might have missed from CoreDataThings you might have missed from CoreData
Things you might have missed from CoreData
 
Департамент Программной Инженерии
Департамент Программной ИнженерииДепартамент Программной Инженерии
Департамент Программной Инженерии
 
Mera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-CMera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-C
 
Swift School #4
Swift School #4Swift School #4
Swift School #4
 
Swift School #3
Swift School #3Swift School #3
Swift School #3
 
Swift School #2
Swift School #2Swift School #2
Swift School #2
 
Swift School #1
Swift School #1Swift School #1
Swift School #1
 
Empatika Design Hours
Empatika Design HoursEmpatika Design Hours
Empatika Design Hours
 
Greenfield Feedback Squeek
Greenfield Feedback SqueekGreenfield Feedback Squeek
Greenfield Feedback Squeek
 
Squeek School #8
Squeek School #8Squeek School #8
Squeek School #8
 
Squeek school #6
Squeek school #6Squeek school #6
Squeek school #6
 
Squeek School #5
Squeek School #5Squeek School #5
Squeek School #5
 
Squeek School #3
Squeek School #3Squeek School #3
Squeek School #3
 

Squeek school 4

  • 1. squeek school Разработка приложений для iOS занятие #4 суббота, 30 апреля 2011 г.
  • 2. View Controller • Управляет содержимым экрана • Наследуй от UIViewController, чтобы определить свою логику “Your” and “Our” View Controllers Your” and “Our” View Controllers • Несколько ViewController-ов могут • Create your Create your own UIViewController subclass for each screenful own UIViewController subclass for each s совмещаться • Plug them together using existing composite view co lug them together using existing composite view controllers View Controller View Controller Navigation Tab Bar View Controller View Controller Controller Controller View Controller View Controller суббота, 30 апреля 2011 г.
  • 3. свой ViewController #import <UIKit/UIKit.h> @interface MyViewController : UIViewController { Creating Your View in Code NSMutableArray *myData; UILabel *myLabel; • Override -loadView } ■ Never call this directly • Create your views @property (readonly) NSArray *myData; - (void)doSomeAction:(id)sender; • Set the view property • Create view controller with -init // Subclass of UIViewController - (void)loadView { MyView *myView = [[MyView alloc] initWithFrame:frame]; view объявлен в UIViewController self.view = myView; // The view controller now owns the view [myView release]; } суббота, 30 апреля 2011 г.
  • 4. свой ViewController - (void)loadView { MyView *myView = [[MyView alloc] initWithFrame:frame]; self.view = myView; [myView release]; } суббота, 30 апреля 2011 г.
  • 5. свой ViewController Builder Creating Your View with Interface • Lay out a view in Interface Builder • File’s owner is view controller class • Hook up view outlet • File - New File - View Controller • Create view controller with -initWithNibName:bundle: • автоматическое создание nib-файла • создание нового объекта viewController при помощи -initWithNibName:bundle: Friday, January 22, 2010 суббота, 30 апреля 2011 г.
  • 6. Навигация • UINavigationController • UITabBarController • UIScrollView суббота, 30 апреля 2011 г.
  • 7. UINavigationController UINavigationController UINavigationController • Stack of view controllers • Stack of view controllers • Navigation bar • Navigation bar View Controller View Controller Navigation View Controller Navigation Controller View Controller Controller View Controller View Controller Thursday, January 28, 2010 5 Thursday, January 28, 2010 5 суббота, 30 апреля 2011 г.
  • 8. управление набором ViewController - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; !!!вызывается retain - (UIViewController *)popViewControllerAnimated:(BOOL)animated; pop обычно не вызывается, автоматически при нажатии ‘<-’ суббота, 30 апреля 2011 г.
  • 9. первый ViewController - (void)applicationDidFinishLaunching } navController = [[UINavigationController alloc] init]; [navController pushViewController:firstViewController animated:NO]; [window addSubview:navController.view]; } суббота, 30 апреля 2011 г.
  • 10. а как использовать? - (void)someAction:(id)sender { } UIViewController *viewController = ...; [self.navigationController pushViewController:viewControlle animated:YES]; } суббота, 30 апреля 2011 г.
  • 11. посмотрим? •New Window-Based app •Новый ViewController с кнопкой •NavigationController и FirstViewController в AppDelegate •SecondViewController •Cвойство title у ViewController суббота, 30 апреля 2011 г.
  • 12. как связать все ViewController? Best Practices for Data Flow • Не стоит использовать глобальные • Figure out exactly what needs to be communicated переменные или AppDelagate • Define input parameters for your view controller • Что нужно на входе следующему ViewController? (и только это!) Data List Detail Controller Controller • В обратную сторону - используя делегаты (с помощью протоколов) Thursday, January 28, 2010 16 суббота, 30 апреля 2011 г.
  • 13. Customizing Navigation бонусы к навигации • Buttons or custom controls • Interact with the entire screen Thursday, January 28, 2010 20 суббота, 30 апреля 2011 г.
  • 14. UINavigationTitle • Содержится у любогоOwnership Navigation Item ViewController Left Bar Button Item View Controller Navigation Item Title View Right Bar Button Item суббота, 30 апреля 2011 г.
  • 15. кнопки справа и слева • UIBarButtonItem отображается сверху • Отображает строку, изображение • Target + Action (как и во всех кнопках) суббота, 30 апреля 2011 г.
  • 16. создание UIBarButtonItem - (void)viewDidLoad { UIBarButtonItem *fooButton = [[UIBarButtonItem alloc] initWithTitle:@"Foo” Text Bar Button Item style:UIBarButtonItemStyleBordered target:self action:@selector(foo:)]; self.navigationItem.leftBarButtonItem = fooButton; [fooButton release]; - (void)viewDidLoad { } UIBarButtonItem *fooButton = [[UIBarButtonItem alloc] - (void)viewDidLoad { initWithTitle:@"Foo” System Bar Button Item UIBarButtonItem *addButton = [[UIBarButtonItem alloc] style:UIBarButtonItemStyleBordered initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self style:UIBarButtonItemStyleBordered action:@selector(foo:)]; target:self action:@selector(add:)]; self.navigationItem.leftBarButtonItem = fooButton; [fooButton release]; self.navigationItem.rightBarButtonItem = addButton; - (void)viewDidLoad [addButton release]; }{ } UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd суббота, 30 апреля 2011 г.
  • 17. кнопка редактирования Edit/Done Button • • Very common pattern практика реализованная • Every view controller has one available ■ Target/action already set up self.navigationItem.leftBarButtonItem = self.editButtonItem; self.navigationItem.leftBarButtonItem = self.editButtonItem; // Called when the user toggles the edit/done button - (void)setEditing:(BOOL)editing animated:(BOOL)animated - (void)setEditing:(BOOL)editing animated:(BOOL)animated { } { // Update appearance of views } суббота, 30 апреля 2011 г.
  • 18. Custom Title View вместо надписи • Arbitrary view in place of the title UISegmentedControl *segmentedControl = ... self.navigationItem.titleView = segmentedControl; [segmentedControl release]; Thursday, January 28, 2010 28 суббота, 30 апреля 2011 г.
  • 19. Скрыть клавиатуру • подписаться на делегат у textField • подписаться на событие -(BOOL) textFieldShouldReturn:(UITextField *) textField; • [textField resignFirstResponder]; суббота, 30 апреля 2011 г.
  • 20. Дата в строку и обратно • NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; • [formatter setDateFormat:@”DD-MM-YYYY”]; • NSDate *date = [formatter dateFromString:string]; • NSString *string = [formatter stringFromDate:date]; суббота, 30 апреля 2011 г.
  • 21. UITabBarController UITabBarController UITabBarController • Array of view controllers • Tab bar • Array of view controllers • Tab bar View Controller Tab Bar View Controller Controller View Controller Tab Bar Controller Thursday, January 28, 2010 32 суббота, 30 апреля 2011 г.
  • 22. используем UITabBarController - (void)applicationDidFinishLaunching { tabBarController = [[UITabBarController alloc] init]; NSArray *myViewControllers = [NSArray arrayWithObjects:someViewController, nil]; tabBarController.viewControllers = myViewControllers; [window addSubview:tabBarController.view]; } суббота, 30 апреля 2011 г.
  • 23. добавляем картинку и надпись Creating Tab Bar Items • Title and image - (void)viewDidLoad { UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@“Playlists” image:[UIImage imageNamed:@“music.png”] tag:0]; self.tabBarItem = item; [item release]; } Thursday, January 28, 2010 суббота, 30 апреля 2011 г. 36
  • 24. стандартный набор Creating Tab Bar Items • System item - (void)viewDidLoad { UITabBarItem *item = [[UITabBarItem alloc] initWithTabBarSystemItem: UITabBarSystemItemBookmarks tag:0] self.tabBarItem = item; [item release]; } Thursday, January 28, 2010 37 суббота, 30 апреля 2011 г.
  • 25. ollers а если слишком More View Controllers • много? b bar controller has too many a tab bar controller has too many What happens when y at once? view controllers to display at once? ■ “More” tab bar item displayed automatically ■ User can navigate to remaining view controllers Thursday, January 28, 2010 39 суббота, 30 апреля 2011 г. 39
  • 26. Tab Bar + Navigation Controllers Multiple parallel hierarchies Thursday, January 28, 2010 41 суббота, 30 апреля 2011 г.
  • 27. архитектура Tab Bar + Navigation Controllers Navigation Controller View Controller Navigation Tab Bar Controller Controller View Controller View Controller суббота, 30 апреля 2011 г.