Skip to content
This repository has been archived by the owner on Jun 20, 2023. It is now read-only.

1.3 UIViewController1 UIViewController のカスタマイズ(storyboard)

yuichi takeda edited this page Jan 23, 2015 · 5 revisions

参考 : UIViewController Class Reference | ViewController プログラミングガイド

MVCの C。View の表示と管理やモデルとViewの連携などを行います。 iOSアプリケーションの画面の一単位として認識すると、比較的理解がしやすいと思います。

UIViewController の役割

役割は大きく分けて三つあります。

  1. コンテンツを表示させる
  2. 複数の UIViewController を管理するコンテナ
  3. 他のViewControllerと連携する Modal(1.4)

本節では 1, 3 の解説をします(2 は次章)。そして UIViewController の lifecycle(1.5) に関しても説明します。

コンテンツを表示させる

ViewControllerを用いてコンテンツを表示するとき、もっともよく使われる方法は UIViewControllerを継承したクラスを作り、カスタマイズしていく方法です。 以下ではその方法について説明します。

UIViewControllerのデザインのカスタマイズ方法は大きく分けてxibを用いる方法とstoryboardを用いる方法があります。 この講義資料を執筆していた当初はxibを用いる方法が主流でしたが、現在はxib、storyboardの両方が用いられています。

xibはUIViewやUIViewControllerのパーツや画面単位でのUIをGUIを用いてデザインするツールです。storyboardは複数のViewController間の連携や画面遷移などをよりデザインしやすくしたツールです。 細かいパーツや再利用性の高いパーツを作る際はxibを用いるほうが利便性が高く、ViewController間の連携を考えるときはstoryboardの方が便利なケースがあります。 そのためどちらを使うかはケースバイケースだと認識すればよいでしょう。

このページではstoryboardを用いた資料の作り方について解説します。xibの資料をご覧になりたい場合はこちらをご覧ください。 1.3 UIViewController1 UIViewController のカスタマイズ(xib, autoresizing)

はじめに

おそらくXcodeのプロジェクトをプロジェクトテンプレートから作成した場合

  • Main.storyboard
  • ViewController.h
  • ViewController.m

などのファイルが初期状態で作成されています。Main.storyboardの中にはViewControllerが一つあり、またViewController.m ではまさにViewControllerのカスタマイズを行っています。

以下では、新規でサブクラスを作成し、新しくカスタマイズしたViewControllerを表示するところまでを行います。

新しいUIViewControllerのサブクラスを作成

まず、新規クラスファイルを生成します。クラス名はここではMixiSampleViewControllerとします。

  1. cmd+n あるいはメニューのFile → New → File と選んで新しいファイルを作成します
  • Cocoa Touch Classを選択
  • Class MixiSampleViewController , Subclass of UIViewController, Also create XIB Fileのチェックは外します
  • Next → Create とすると新規ファイル MixiSampleViewController.h MixiSampleViewController.m が作成されます

new file

storyboard上での操作

新規ファイルが作れたら、次はstoryboard上で以下の操作を行います

  • MixiSampleViewControllerのViewControllerを作成
  • Initial ViewControllerに指定
  • MixiSampleViewControllerのカスタマイズ

MixiSampleViewControllerのViewControllerを作成

Main.storyboardを選択して、右側のユーティリティエリアのオブジェクトライブラリから View Controller を探し、中央の編集エリアにドラッグ&ドロップします。 こうすることで、このstoryboard上に新しいViewControllerが生成されます。

drop down new view controller

今新しく作ったView Controllerのクラスはデフォルトである UIViewControllerになります。このクラスを自分の作ったViewControllerに切り替えます。 ドラッグ&ドロップしたView Controller を選択した上で右側のユーティリティエリアの上部左から三番目の Identity inspectorの中にあるClassを MixiSampleViewController にします

set class

Initial View Controllerに設定

storyboardにはデフォルトで最初にロードされるView Controllerを設定できます。そのView ControllerのことをInitial View Controllerと呼びます。

プロジェクトテンプレートから読み込まれた場合は最初に生成される ViewController というクラスがInitial View Controllerとして設定されています。その設定をMixiSampleViewControllerに移行します。

storyboardでMixiSampleViewControllerを選択した状態で、右側のユーティリティエリアの左から4番目のAttributes Inspectorを開きます。 その下のView Controllerの設定項目の中に is Initial View Controller のチェックがあると思うのでそこにチェックを入れます。 すると、View Controllerに向かって付いていた矢印が MixiSampleViewController に移ると思います。そうなっていればOKです。 この矢印はそのStoryboardのInitial View Controllerの 印です。

customized view

MixiSampleViewControllerのカスタマイズ

MixiSampleViewControllerの見た目をカスタマイズします。 ViewControllerには一つのUIViewインスタンスが割り当てられていて、それをカスタマイズしていく、というのが流れです。 UIViewについてはUIViewの項目をご覧頂く方がわかりやすいと思います。

ここではオブジェクトライブラリから適当にViewのパーツをこのView Controller内にドラッグ&ドロップしてください。 ドロップできないものもいくつかあります。それらはこのケースだと使えないものとなってきます。何が使えて、なぜ使えないかは UIKitに慣れてくると次第に理解が深まると思います。

まだAutolayoutの設定をしていないと思うのでパーツは左上に寄せておくと良いでしょう。 また次の章で利用するのでラベル(UILabel)とボタン(UIButton)を一つずつ配置しておいてください。

customized view

ここまでできれば、一度実行してみてください。シミュレータでカスタマイズしたView Controllerが表示されればOKです。

result

各パーツと実装を結びつける

storyboardやxib上のパーツとソースコードを結びつけます。先ほどView ControllerのクラスをMixiSampleViewControllerを指定したのでこのViewControllerが生成されるときはMixiSampleViewControllerのインスタンスが生成されるようになっています。 さらにView上のパーツを各クラスのプロパティと結びつけたり、ユーザーのアクションとView Controllerのメソッドを結びつけます。 (アウトレットという仕組みです)

IBOutlet

各パーツとクラスのプロパティを結びつけるにはIBOutletを用います。手順としては、IBOutletのプロパティをコード上で作成し、そのプロパティをstoryboard上のパーツと結びつけます。

MixiSampleViewController.hにプロパティを追加

MixiSampleViewControllerの@interface部にIBOutletキーワードを付けたUILabelのプロパティを作成してください

@interface MixiSampleViewController : UIViewController
@property (nonatomic, strong) IBOutlet UILabel *label;
@end
storyboard上で紐づける

プロパティの宣言ができれば再びstoryboardに戻ってMixiSampleViewControllerを選択します。Document OutlineのMixi Sample View Controllerを選択して右クリックをすると次のようなパネルが出現します。

result

この中に先ほど作成した label という選択肢があると思います。labelの右側の円内からドラッグしてView Controller上のラベルにドロップしてください。こうすることでコード上のプロパティとstoryboard上のUIとを結びつけることができます。

result

labelの中身を書き換える

実際に結びつけることができたら、ラベルの中身をコード上から書き換えて見ましょう。MixiSampleViewControllerのviewDidLoadを次のように書き換えます。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.label.text = @"Test";
}

labelプロパティが正しく紐付けができていれば、実行時にラベルの文字列が "Test" に変化すると思います。 (長めのテキストを入れた場合は自動的にTruncateされると思います)

IBAction

UI上のパーツに対してユーザーが何かアクションを起こした時に、対応するメソッドを呼び出すにはIBActionを利用します。 手順としてはIBOutletと同様に、メソッドを宣言、定義し、storyboard上のパーツと結びつけます。

メソッドの定義

MixiSampleViewControllerの@implementationの中に以下のメソッドを定義してください

- (IBAction)buttonTapped:(id)sender
{
    self.label.text = @"YES";
}

このメソッドの戻り値の型がIBActionとなっていますが、これはInterface Builderが紐付けれるメソッドを探すためのキーワードとなります。 実際に何かreturnする、というものではなくvoidのようなもの、と思っておいて差し支えないと思います。

メソッドとパーツアクションの結びつけ

メソッドの実装ができれば先ほどと同様な結びつけを行います。

再びstoryboardに戻ってMixiSampleViewControllerを選択し、Document OutlineのMixi Sample View Controllerを選択して右クリックをすると次のようなパネルが出現します。 つぎは今定義したメソッドが増えていると思うので、ボタンにドラッグ&ドロップします。

img

ドロップしたときに、どのアクションと対応するかを聞かれると思います。ボタンタップ時には "Touch Up Inside" を選ぶのがよいでしょう。

これで結びつけは完了です。実行してボタンをタップするとラベルの文字が変わればOKです。

演習課題

ここまでで、storyboardを用いてUIViewControllerをカスタマイズすることができると思います。 ここでレクチャーした内容を実際に行うのが演習課題となります。

解答例については iOSTraining/SampleProjects/1.3/MyFirstProject を参照してください。

課題1.

新規プロジェクトを作成してください。 そのあと新しいViewControllerのクラスを作成し、storyboard上に追加し、起動時に表示されるViewControllerとなるようにしてください。

課題2.

課題1.で作成したViewControllerにUILabelとUIButtonのパーツを配置してください。 UIButtonをタップしたらラベルの文字列が YES となるようにしてください。

おまけ

Assistant Editorを表示した上で、control + ドラッグ&ドロップでプロパティの追加とIBOutletやIBActionの結びつけを一発でできます。

img

はじめに

  1. iOSについて

  2. Xcode最初のステッフ

  3. 導入

  4. Objective C の基礎

  5. メモリ管理

  6. 1.3 UIViewController1 UIViewController のカスタマイズ(xib, autoresizing)

  7. 1.3 UIViewController1 UIViewController のカスタマイズ(storyboard)

  8. UIViewController2 - ModalViewController

  9. UIViewController2 - ModalViewController(storyboard)

  10. UIViewController3 - ライフサイクル

  11. HomeWork 1 Objective C の基本文法

  12. HomeWork 2 UIViewControllerとModalViewController

  13. HomeWork 3 UIViewController + Animation

  14. UIKit 1 - container, rotate-

  15. UINavigationController

  16. UITabController

  17. Custom Container View Controller

  18. Supporting Multiple Interface Orientations

  19. HomeWork 1 - タブバーからモーダルビューを表示する

  20. HomeWork 2 - NavigationController

  21. HomeWork 2.3 デバイスことに回転対応

  22. UIKit 2- UIView -

  23. UIView

  24. UIView のカスタマイズ

  25. UIView Animation

  26. HomeWork 1 - UIScrollView

  27. UIKit 3 - table view -

  28. UITableView について

  29. UITableViewとNavigationController

  30. custom UITableViewCell の作成

  31. UITableViewのその他のオプション、カスタマイズ

  32. HomeWork 1 - Dynamic height with a custom uitableviewcell

  33. UIKit 4 - image and text -

  34. UIImagePickerController

  35. Assets Library

  36. UITextFiled, UITextView

  37. KeyboardNotification

  38. Homework 1 - フォトの複数枚選択

  39. ネットワーク処理

  40. NSURLConnection

  41. JSONのシリアライズとデシリアライズ

  42. UIWebView

  43. ローカルキャッシュと通知

  44. NSUserDefaults, Settings Bundle

  45. NSFileManager

  46. Key Value Observing

  47. NSNotification、NSNotificationCenter を用いた通知

  48. UILocalNotification

  49. Blocks, GCD

  50. Blocks

  51. GCD

  52. 【演習】GCD,-Blocksを用いたHTTPリクエストマネージャの作成

  53. 設計とデザインパターン

  54. クラス設計 1

  55. クラス設計 2

  56. [クラス設計演習] (https://github.com/mixi-inc/iOSTraining/wiki/9.3-%E3%82%AF%E3%83%A9%E3%82%B9%E8%A8%AD%E8%A8%88%E6%BC%94%E7%BF%92)

  57. 開発ツール

  58. Instruments, デバッガ

  59. CocoaPods

  60. テスト

  61. iOS開発におけるテスト

  62. GHUnit

  63. Kiwi

  64. KIF

  65. In-App Purchase

  66. In-App Purchase

  67. 付録

  68. Tips of Xcode

  69. Auto Layout 入門

  70. Auto Layout ドリル

Edit sidebar

Clone this wiki locally