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 г.
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 г.
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 г.