63
CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers 1 Thursday, January 28, 2010

CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

CS193P - Lecture 7iPhone Application Development

Navigation & Tab Bar Controllers

1Thursday, January 28, 2010

xkozima
Typewritten Text
ナビゲーションコントローラ と タブバーコントローラ
Page 2: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Announcements• Assignment 3 is due tomorrow• Paparazzi 1 is due on Wednesday February 3rd

2Thursday, January 28, 2010

Page 3: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Today’s Topics• Navigation Controllers

■ Application Data Flow

• Customizing Navigation• Tab Bar Controllers• Combining Approaches

3Thursday, January 28, 2010

xkozima
Typewritten Text
今日のトピックス
xkozima
Typewritten Text
xkozima
Typewritten Text
ナビゲーションコントローラ   アプリケーションのデータの流れ
xkozima
Typewritten Text
xkozima
Typewritten Text
ナビゲーションコントローラのカスタム化
xkozima
Typewritten Text
これらを複合させるアプローチ
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
タブバーコントローラ
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 4: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Navigation Controllers

4Thursday, January 28, 2010

xkozima
Typewritten Text
ナビゲーションコントローラ
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 5: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

UINavigationController• Stack of view controllers• Navigation bar

NavigationController

5Thursday, January 28, 2010

xkozima
Typewritten Text
重層化された View Controller
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
ナビゲーションバー
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 6: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

UINavigationController• Stack of view controllers• Navigation bar

View Controller

View Controller

View Controller

NavigationController

5Thursday, January 28, 2010

Page 7: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

How It Fits Together

6Thursday, January 28, 2010

xkozima
Typewritten Text
これら要素がどのように合体するのか
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 8: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

How It Fits Together• Top view controller’s view

6Thursday, January 28, 2010

xkozima
Typewritten Text
最前面にある View Controller の View
xkozima
Typewritten Text
Page 9: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

How It Fits Together• Top view controller’s view• Top view controller’s title

6Thursday, January 28, 2010

xkozima
Typewritten Text
最前面にある View Controller の タイトル
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 10: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

How It Fits Together• Top view controller’s view• Top view controller’s title• Previous view controller’s title

6Thursday, January 28, 2010

xkozima
Typewritten Text
ひとつ前の View Controller の タイトル(「戻る」ボタン)
Page 11: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

How It Fits Together• Top view controller’s view• Top view controller’s title• Previous view controller’s title• Top view controller’s toolbar

items (iPhone OS 3.0)

6Thursday, January 28, 2010

xkozima
Typewritten Text
最前面にある View Controller の ツールバー
Page 12: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Modifying the Navigation Stack• Push to add a view controller

• Pop to remove a view controller

• Set to change the entire stack of view controllers(iPhone OS 3.0)

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

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

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated;

7Thursday, January 28, 2010

xkozima
Typewritten Text
ナビゲーション スタックの操作
xkozima
Typewritten Text
xkozima
Typewritten Text
View Controller を加える
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
View Controller をはずす
xkozima
Typewritten Text
xkozima
Typewritten Text
View Controller のスタック(積み上げ)全体を 別のスタックと入れ替える
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 13: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Pushing Your First View Controller

- (void)applicationDidFinishLaunching// Create a navigation controllernavController = [[UINavigationController alloc] init];

}

// Push the first view controller on the stack[navController pushViewController:firstViewController

animated:NO];

// Add the navigation controller’s view to the window[window addSubview:navController.view];

8Thursday, January 28, 2010

xkozima
Typewritten Text
最初の View Controller を Push するには
xkozima
Typewritten Text
xkozima
Typewritten Text
Navigation Controller を生成
xkozima
Typewritten Text
xkozima
Typewritten Text
最初の VC を スタックに Push
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
    大元の Window に Navigation Controller をセット
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
アプリ起動直後に呼び出されるメソッド
xkozima
Typewritten Text
Page 14: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

In Response to User Actions• Push from within a view controller on the stack

• Almost never call pop directly!■ Automatically invoked by the back button

- (void)someAction:(id)sender{

// Potentially create another view controllerUIViewController *viewController = ...;

[self.navigationController pushViewController:viewController animated:YES];

}

9Thursday, January 28, 2010

xkozima
Typewritten Text
ユーザのアクションに     応答するには
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
必要に応じて 新しい VC を生成
xkozima
Typewritten Text
xkozima
Typewritten Text
 スタック上の VC から さらに奥側に Push する
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
自分の属する Navigation Controller
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
直接 Pop を呼ぶことはない       「戻る」ボタンで       自動的に呼び出される
xkozima
Typewritten Text
Page 15: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Demo:Pushing & Popping

10Thursday, January 28, 2010

xkozima
Typewritten Text
xkozima
Typewritten Text
Page 16: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Application Data Flow

11Thursday, January 28, 2010

xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
View の階層を行き来するとき どのようなデータをどのようにやりとりするか
Page 17: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Paparazzi

12Thursday, January 28, 2010

xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
この場面に 1つの View Controller
xkozima
Typewritten Text
xkozima
Typewritten Text
この場面に 1つの View Controller
xkozima
Typewritten Text
この場面に 1つの View C
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Line
xkozima
Line
xkozima
Typewritten Text
誰の?
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
どの 写真?
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 18: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

A Controller for Each Screen

List Controller

Detail Controller

List Controller

13Thursday, January 28, 2010

xkozima
Typewritten Text
スクリーンごとのコントローラ
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
人のリスト
xkozima
Typewritten Text
写真のリスト
xkozima
Typewritten Text
写真
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 19: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Connecting View Controllers• Multiple view controllers may need to share data• One may need to know about what another is doing

■ Watch for added, removed or edited data■ Other interesting events

14Thursday, January 28, 2010

xkozima
Typewritten Text
xkozima
Typewritten Text
View Controller のつなげかた
xkozima
Typewritten Text
xkozima
Typewritten Text
複数の VC 間で共有データが必要
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
他の VC が何をしているのかを知りたい  ・データの追加/削除/変更  ・その他のイベント
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 20: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

How Not To Share Data• Global variables or singletons

■ This includes your application delegate!

• Direct dependencies make your code less reusable■ And more difficult to debug & test

List Controller

Detail Controller

15Thursday, January 28, 2010

xkozima
Typewritten Text
データを共有しない ようにするには…
xkozima
Typewritten Text
グローバル変数や唯一オブジェクト?
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 21: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

How Not To Share Data• Global variables or singletons

■ This includes your application delegate!

• Direct dependencies make your code less reusable■ And more difficult to debug & test

List Controller

Detail Controller

Application Delegate

15Thursday, January 28, 2010

xkozima
Typewritten Text
xkozima
Typewritten Text
このような依存性をつくると プログラムの再利用性が       なくなり       デバッグなどが       やりづらくなる
xkozima
Typewritten Text
Page 22: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

How Not To Share Data• Global variables or singletons

■ This includes your application delegate!

• Direct dependencies make your code less reusable■ And more difficult to debug & test

List Controller

Detail Controller

Application Delegate

Don’t Do This!

15Thursday, January 28, 2010

xkozima
Typewritten Text
これはするな!
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 23: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

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

List Controller

Detail Controller

16Thursday, January 28, 2010

xkozima
Typewritten Text
では,どのようにデータの流れをつくるか
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
必要最低限のコミュニケーションを見極め…
xkozima
Typewritten Text
xkozima
Typewritten Text
View Controller への入力パラメタとして設定する
xkozima
Typewritten Text
Page 24: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

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

xkozima
Line
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
こんな感じ
xkozima
Typewritten Text
 
xkozima
Typewritten Text
Page 25: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

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

• For communicating back up the hierarchy, use loose coupling■ Define a generic interface for observers (like delegation)

List Controller

Detail Controller

16Thursday, January 28, 2010

xkozima
Typewritten Text
逆向きのコミュニケーションには,ルースカップリングを使う.  ・デリゲーションを使う
xkozima
Typewritten Text
Page 26: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

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

• For communicating back up the hierarchy, use loose coupling■ Define a generic interface for observers (like delegation)

List Controller

Detail Controller

I care!

16Thursday, January 28, 2010

xkozima
Line
xkozima
Typewritten Text
こんな感じ
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 27: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

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

• For communicating back up the hierarchy, use loose coupling■ Define a generic interface for observers (like delegation)

List Controller

Detail Controller

16Thursday, January 28, 2010

xkozima
Typewritten Text
Page 28: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Example:UIImagePickerController

17Thursday, January 28, 2010

Page 29: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Demo:Passing Data Along

18Thursday, January 28, 2010

xkozima
Typewritten Text
Page 30: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Customizing Navigation

19Thursday, January 28, 2010

xkozima
Typewritten Text
ナビゲーションのカスタム化
xkozima
Typewritten Text
xkozima
Typewritten Text
 
Page 31: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Customizing Navigation• Buttons or custom controls• Interact with the entire screen

20Thursday, January 28, 2010

xkozima
Typewritten Text
xkozima
Typewritten Text
ナビゲーションのカスタム化
xkozima
Typewritten Text
xkozima
Typewritten Text
ボタンや他のコントロール(操作対象)
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
スクリーン全体でインタラクション
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Rectangle
xkozima
Rectangle
Page 32: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

UINavigationItem• Describes appearance of the navigation bar

■ Title string or custom title view■ Left & right bar buttons■ More properties defined in UINavigationBar.h

• Every view controller has a navigation item for customizing■ Displayed when view controller is on top of the stack

21Thursday, January 28, 2010

xkozima
Typewritten Text
すべての VC が内蔵するアイテム
xkozima
Typewritten Text
xkozima
Typewritten Text
バーの外見を決める
xkozima
Typewritten Text
xkozima
Typewritten Text
タイトル
xkozima
Typewritten Text
xkozima
Typewritten Text
左右のボタン
xkozima
Typewritten Text
xkozima
Typewritten Text
その他
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
これらアイテムはナビゲーションの中に自動的に表示される
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 33: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Navigation Item Ownership

View Controller

Right Bar Button Item

Navigation Item

Left Bar Button Item

Title View

22Thursday, January 28, 2010

Page 34: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Displaying a Title• UIViewController already has a title property

■ @property(nonatomic,copy) NSString *title;

• Navigation item inherits automatically■ Previous view controller’s title is displayed in back button

viewController.title = @“Detail”;

23Thursday, January 28, 2010

xkozima
Typewritten Text
xkozima
Typewritten Text
VC は元々 タイトルを持っている
xkozima
Typewritten Text
xkozima
Typewritten Text
ナビゲーションアイテム        はそれを        自動的に        継承する
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
前の VC のタイトルが「戻る」ボタンに表示される
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 35: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Left & Right Buttons• UIBarButtonItem

■ Special object, defines appearance & behavior for items in navigation bars and toolbars

• Display a string, image or predefined system item• Target + action (like a regular button)

24Thursday, January 28, 2010

xkozima
Typewritten Text
xkozima
Typewritten Text
左右のボタン
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
「新規メール作成」など アップル標準のピクトグラムも 用意されている
xkozima
Typewritten Text
xkozima
Typewritten Text
普通のボタンのように ターゲット+アクションを 設定することもできる.
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 36: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

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

xkozima
Typewritten Text
テキスト バー ボタン
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
ボタンのタイトル     スタイル     ターゲット     アクション
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
左ボタンに設定
xkozima
Typewritten Text
xkozima
Typewritten Text
ここから解放(設定先の VC 側で retain される)
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 37: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

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

xkozima
Typewritten Text
xkozima
Typewritten Text
システム バー ボタン
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
「追加ボタン」
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
右ボタンに設定
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 38: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

• 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

xkozima
Typewritten Text
xkozima
Typewritten Text
「編集」「(編集)終了」ボタン
xkozima
Typewritten Text
xkozima
Typewritten Text
よく使うので…
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
あらかじめ VC に用意されている
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
用意されているボタン
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
このメソッドが呼ばれる(editing=YES/NO で Edit/Done を区別)
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 39: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Custom Title View• Arbitrary view in place of the title

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

28Thursday, January 28, 2010

xkozima
Typewritten Text
タイトルのカスタム化
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
任意の画面要素をタイトル部分に           入れてよい
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 40: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

• Sometimes a shorter back button is needed

Back Button

self.title = @“Hello there, CS193P!”;

29Thursday, January 28, 2010

xkozima
Typewritten Text
「戻る」ボタン
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
デフォルトでは直前のタイトルだが        もっと短いボタンに         したい場合がある
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 41: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

• Sometimes a shorter back button is needed

Back Button

self.title = @“Hello there, CS193P!”;

UIBarButtonItem *heyButton = [[UIBarButtonItem alloc] initWithTitle:@“Hey!” ...];self.navigationItem.backButtonItem = heyButton;

[heyButton release];

29Thursday, January 28, 2010

xkozima
Typewritten Text
xkozima
Typewritten Text
新しい UIBarButtonItem を設定
xkozima
Typewritten Text
Page 42: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

• Sometimes a shorter back button is needed

Back Button

self.title = @“Hello there, CS193P!”;

UIBarButtonItem *heyButton = [[UIBarButtonItem alloc] initWithTitle:@“Hey!” ...];self.navigationItem.backButtonItem = heyButton;

[heyButton release];

29Thursday, January 28, 2010

xkozima
Typewritten Text
すると,こうなる.
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 43: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Demo:Customizing Buttons

30Thursday, January 28, 2010

Page 44: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Tab Bar Controllers

31Thursday, January 28, 2010

xkozima
Typewritten Text
タブバーコントローラ
xkozima
Typewritten Text
Page 45: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

UITabBarController• Array of view controllers• Tab bar

Tab BarController

32Thursday, January 28, 2010

xkozima
Typewritten Text
機能切替ボタン
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
スタックではなく ただの VC 配列
Page 46: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

UITabBarController• Array of view controllers• Tab bar

View Controller

View Controller

View Controller

Tab BarController

32Thursday, January 28, 2010

xkozima
Typewritten Text
xkozima
Typewritten Text
スタックではなく ただの VC 配列
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 47: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

How It Fits Together

33Thursday, January 28, 2010

Page 48: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

How It Fits Together• Selected view controller’s view

33Thursday, January 28, 2010

Page 49: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

How It Fits Together• Selected view controller’s view• All view controllers’ titles

33Thursday, January 28, 2010

xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
タブバーには 各 VC のタイトルが入る (イメージも入る)
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
アップル標準のアイコン
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
タブバー
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 50: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Setting Up a Tab Bar Controller

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

34Thursday, January 28, 2010

xkozima
Typewritten Text
セットアップ方法
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
アプリ起動直後に呼び出されるメソッド
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
NSArray (of VC) をセット
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
ベース window にタブバーコントローラをセット
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
タブバーコントローラの生成
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 51: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Tab Bar Appearance• View controllers can define their appearance in the tab bar

• UITabBarItem■ Title + image or system item

• Each view controller comes with a tab bar item for customizing

35Thursday, January 28, 2010

xkozima
Typewritten Text
タブバーの外見
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
オリジナルのタイトル+イメージ あるいはシステム標準アイテム
xkozima
Typewritten Text
xkozima
Typewritten Text
すべての VC はタブバーアイテムを持っている. これをカスタム化すればよい.
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 52: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

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

xkozima
Typewritten Text
タブバーアイテムの生成
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
オリジナルのアイテムの場合
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 53: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

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

xkozima
Typewritten Text
システム標準のアイテムの場合
xkozima
Typewritten Text
Page 54: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Demo:Using a Tab Bar Controller

38Thursday, January 28, 2010

Page 55: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

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

view controllers to display at once?

39Thursday, January 28, 2010

xkozima
Typewritten Text
たくさんのアイテムを タブバーに並べるには…
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 56: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

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

39Thursday, January 28, 2010

xkozima
Typewritten Text
More アイテム
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
More アイテムが 自動的に入れられる
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 57: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

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

xkozima
Typewritten Text
More をタップすれば 残りのアイテムの一覧が出る さらに右上の Edit を押すと…
xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 58: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

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■ Customize order

39Thursday, January 28, 2010

xkozima
Typewritten Text
アイテムの順序を カスタマイズできる (すべて Tab Bar Controller に  内蔵された機能)
xkozima
Typewritten Text
Page 59: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Combining Approaches

40Thursday, January 28, 2010

xkozima
Typewritten Text
ナビゲーションとタブバーを組み合わせると…
xkozima
Typewritten Text
Page 60: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Tab Bar + Navigation ControllersMultiple parallel hierarchies

41Thursday, January 28, 2010

xkozima
Typewritten Text
xkozima
Typewritten Text
並列された階層構造
xkozima
Typewritten Text
xkozima
Typewritten Text
Page 61: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Tab Bar + Navigation Controllers

Navigation Controller

View Controller

Navigation Controller

View Controller

View ControllerTab Bar Controller

42Thursday, January 28, 2010

Page 62: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Nesting Navigation Controllers• Create a tab bar controller

• Create each navigation controller

• Add them to the tab bar controller

navController = [[UINavigationController alloc] init];[navController pushViewController:firstViewController animated:NO];

tabBarController = [[UITabBarController alloc] init];

tabBarController.viewControllers = [NSArray arrayWithObjects: navController, anotherNavController, someViewController, nil];

43Thursday, January 28, 2010

xkozima
Typewritten Text
xkozima
Typewritten Text
xkozima
Typewritten Text
入れ子になったナビゲーションコントローラ
xkozima
Typewritten Text
Page 63: CS193P - Lecture 7CS193P - Lecture 7 iPhone Application Development Navigation & Tab Bar Controllers Thursday, January 28, 2010 1. ナビゲーションコントローラ と タブバーコントローラ

Questions?

44Thursday, January 28, 2010

xkozima
Typewritten Text
xkozima
Typewritten Text