Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Squeek school 4

2,391 views

Published on

Published in: Education
  • Be the first to comment

  • Be the first to like this

Squeek school 4

  1. 1. squeek school Разработка приложений для iOS занятие #4суббота, 30 апреля 2011 г.
  2. 2. View Controller • Управляет содержимым экрана • Наследуй от UIViewController, чтобы определить свою логику “Your” and “Our” View ControllersYour” and “Our” View Controllers • Несколько ViewController-ов могут • Create yourCreate 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. 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. 4. свой ViewController - (void)loadView { MyView *myView = [[MyView alloc] initWithFrame:frame]; self.view = myView; [myView release]; }суббота, 30 апреля 2011 г.
  5. 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. 6. Навигация • UINavigationController • UITabBarController • UIScrollViewсуббота, 30 апреля 2011 г.
  7. 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. 8. управление набором ViewController - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; !!!вызывается retain - (UIViewController *)popViewControllerAnimated:(BOOL)animated; pop обычно не вызывается, автоматически при нажатии ‘<-’суббота, 30 апреля 2011 г.
  9. 9. первый ViewController - (void)applicationDidFinishLaunching } navController = [[UINavigationController alloc] init]; [navController pushViewController:firstViewController animated:NO]; [window addSubview:navController.view]; }суббота, 30 апреля 2011 г.
  10. 10. а как использовать? - (void)someAction:(id)sender { } UIViewController *viewController = ...; [self.navigationController pushViewController:viewControlle animated:YES]; }суббота, 30 апреля 2011 г.
  11. 11. посмотрим? •New Window-Based app •Новый ViewController с кнопкой •NavigationController и FirstViewController в AppDelegate •SecondViewController •Cвойство title у ViewControllerсуббота, 30 апреля 2011 г.
  12. 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. 13. Customizing Navigation бонусы к навигации • Buttons or custom controls • Interact with the entire screen Thursday, January 28, 2010 20суббота, 30 апреля 2011 г.
  14. 14. UINavigationTitle • Содержится у любогоOwnership Navigation Item ViewController Left Bar Button Item View Controller Navigation Item Title View Right Bar Button Itemсуббота, 30 апреля 2011 г.
  15. 15. кнопки справа и слева • UIBarButtonItem отображается сверху • Отображает строку, изображение • Target + Action (как и во всех кнопках)суббота, 30 апреля 2011 г.
  16. 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. 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. 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. 19. Скрыть клавиатуру • подписаться на делегат у textField • подписаться на событие -(BOOL) textFieldShouldReturn:(UITextField *) textField; • [textField resignFirstResponder];суббота, 30 апреля 2011 г.
  20. 20. Дата в строку и обратно • NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; • [formatter setDateFormat:@”DD-MM-YYYY”]; • NSDate *date = [formatter dateFromString:string]; • NSString *string = [formatter stringFromDate:date];суббота, 30 апреля 2011 г.
  21. 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. 22. используем UITabBarController- (void)applicationDidFinishLaunching{ tabBarController = [[UITabBarController alloc] init]; NSArray *myViewControllers = [NSArray arrayWithObjects:someViewController, nil]; tabBarController.viewControllers = myViewControllers; [window addSubview:tabBarController.view];}суббота, 30 апреля 2011 г.
  23. 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. 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. 25. ollers а если слишком More View Controllers • много?b bar controller has too many a tab bar controller has too many What happens wheny 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. 26. Tab Bar + Navigation Controllers Multiple parallel hierarchies Thursday, January 28, 2010 41суббота, 30 апреля 2011 г.
  27. 27. архитектура Tab Bar + Navigation Controllers Navigation Controller View Controller Navigation Tab Bar Controller Controller View Controller View Controllerсуббота, 30 апреля 2011 г.

×