squeek school 4

Post on 15-Jun-2015

2.213 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

squeek school

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

View Controller

• Управляет содержимым экрана

• Наследуй от UIViewController, чтобы определить свою логику

• Несколько ViewController-ов могут совмещаться

“Your” and “Our” View Controllers• Create your own UIViewController subclass for each screenful• Plug them together using existing composite view controllers

View Controller

View Controller

View Controller

NavigationController

25Friday, January 22, 2010

“Your” and “Our” View Controllers• Create your own UIViewController subclass for each screenful• Plug them together using existing composite view controllers

View Controller

View Controller

View Controller

Tab BarController

25Friday, January 22, 2010

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

свой ViewController

#import <UIKit/UIKit.h>@interface MyViewController : UIViewController {NSMutableArray *myData; UILabel *myLabel;}

@property (readonly) NSArray *myData;- (void)doSomeAction:(id)sender;

view объявлен в UIViewController

Creating Your View in Code• Override -loadView

■ Never call this directly

• Create your views• Set the view property• Create view controller with -init

// Subclass of UIViewController- (void)loadView{

}

MyView *myView = [[MyView alloc] initWithFrame:frame];

[myView release];self.view = myView; // The view controller now owns the view

29Friday, January 22, 2010

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

свой ViewController

- (void)loadView {MyView *myView = [[MyView alloc] initWithFrame:frame];self.view = myView; [myView release];}

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

свой ViewController

• File - New File - View Controller

• автоматическое создание nib-файла

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

Creating Your View with Interface Builder• Lay out a view in Interface Builder• File’s owner is view controller class• Hook up view outlet• Create view controller

with -initWithNibName:bundle:

30Friday, January 22, 2010

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

Навигация• UINavigationController

• UITabBarController

• UIScrollView

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

UINavigationControllerUINavigationController

• Stack of view controllers• Navigation bar

View Controller

View Controller

View Controller

NavigationController

5Thursday, January 28, 2010

UINavigationController• Stack of view controllers• Navigation bar

View Controller

View Controller

View Controller

NavigationController

5Thursday, January 28, 2010

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

управление набором ViewController

- (void)pushViewController:(UIViewController *)viewControlleranimated:(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?

• Не стоит использовать глобальные переменные или AppDelagate

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

Best Practices for Data Flow• Figure out exactly what needs to be communicated• Define input parameters for your view controller

List Controller

Detail Controller

Data

16Thursday, January 28, 2010

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

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

бонусы к навигацииCustomizing Navigation• Buttons or custom controls• Interact with the entire screen

20Thursday, January 28, 2010

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

UINavigationTitle

• Содержится у любого ViewControllerNavigation Item Ownership

View Controller

Right Bar Button Item

Navigation Item

Left Bar Button Item

Title View

22Thursday, January 28, 2010суббота, 30 апреля 2011 г.

кнопки справа и слева

• UIBarButtonItem отображается сверху

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

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

создание UIBarButtonItem

Text Bar Button Item

- (void)viewDidLoad{

UIBarButtonItem *fooButton = [[UIBarButtonItem alloc]initWithTitle:@"Foo”style:UIBarButtonItemStyleBorderedtarget:selfaction:@selector(foo:)];

self.navigationItem.leftBarButtonItem = fooButton;

[fooButton release];}

25Thursday, January 28, 2010

- (void)viewDidLoad {UIBarButtonItem *fooButton = [[UIBarButtonItem alloc] initWithTitle:@"Foo” style:UIBarButtonItemStyleBordered target:self action:@selector(foo:)];

self.navigationItem.leftBarButtonItem = fooButton; [fooButton release];

}

System Bar Button Item

- (void)viewDidLoad{

UIBarButtonItem *addButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAddstyle:UIBarButtonItemStyleBorderedtarget:selfaction:@selector(add:)];

self.navigationItem.rightBarButtonItem = addButton;

[addButton release];}

26Thursday, January 28, 2010

- (void)viewDidLoad {UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd style:UIBarButtonItemStyleBordered target:selfaction:@selector(add:)];

self.navigationItem.rightBarButtonItem = addButton; [addButton release];}

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

кнопка редактирования

• реализованная практика• Very common pattern• Every view controller has one available

■ Target/action already set up

Edit/Done Button

self.navigationItem.leftBarButtonItem = self.editButtonItem;

// Called when the user toggles the edit/done button- (void)setEditing:(BOOL)editing animated:(BOOL)animated{

// Update appearance of views}

27Thursday, January 28, 2010

self.navigationItem.leftBarButtonItem = self.editButtonItem;

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {}

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

вместо надписиCustom Title View• Arbitrary view in place of the title

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

28Thursday, January 28, 2010

суббота, 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 г.

UITabBarControllerUITabBarController• Array of view controllers• Tab bar

Tab BarController

32Thursday, January 28, 2010

UITabBarController• Array of view controllers• Tab bar

View Controller

View Controller

View Controller

Tab BarController

32Thursday, January 28, 2010

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

используем UITabBarController

- (void)applicationDidFinishLaunching}

// Create a tab bar controllertabBarController = [[UITabBarController alloc] init];

// Set the array of view controllerstabBarController.viewControllers = myViewControllers;

// Add the tab bar controller’s view to the window[window addSubview:tabBarController.view];

- (void)applicationDidFinishLaunching}

// Create a tab bar controllertabBarController = [[UITabBarController alloc] init];

// Set the array of view controllerstabBarController.viewControllers = myViewControllers;

// Add the tab bar controller’s view to the window[window addSubview:tabBarController.view];

- (void)applicationDidFinishLaunching}

// Create a tab bar controllertabBarController = [[UITabBarController alloc] init];

// Set the array of view controllerstabBarController.viewControllers = myViewControllers;

// Add the tab bar controller’s view to the window[window addSubview:tabBarController.view];

- (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];

}

36Thursday, January 28, 2010суббота, 30 апреля 2011 г.

стандартный наборCreating Tab Bar Items• System item

- (void)viewDidLoad{

UITabBarItem *item = [[UITabBarItem alloc] initWithTabBarSystemItem: UITabBarSystemItemBookmarks tag:0]self.tabBarItem = item;[item release];

}

37Thursday, January 28, 2010

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

а если слишком много?

More View Controllers• What happens when a tab bar controller has too many

view controllers to display at once?

39Thursday, January 28, 2010

More View Controllers• What happens when a tab bar controller has too many

view controllers to display at once?■ “More” tab bar item

displayed automatically■ User can navigate to

remaining view controllers

39Thursday, January 28, 2010суббота, 30 апреля 2011 г.

Tab Bar + Navigation ControllersMultiple parallel hierarchies

41Thursday, January 28, 2010суббота, 30 апреля 2011 г.

архитектураTab Bar + Navigation Controllers

Navigation Controller

View Controller

Navigation Controller

View Controller

View ControllerTab Bar Controller

42Thursday, January 28, 2010

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

top related