@interface ~ @end

  • 機能を定義する

.mの@interface ~ @endか、.hの@interface ~ @endに メソッドを定義する

.mか.hに入れる違いは他のファイルとそのメソッドを共有するかしないかで決める。

.hにもinterfaceがあるのに、.mにも@interface?

http://stackoverflow.com/questions/11594391/why-is-there-interface-above-implementation

class extenstion

class extension : empty parentheses(からの括弧)で表現される @interface MyClass ()

category

category : non-empty pair of parentheses(何かが書いてある括弧)で表現される @interface MyClass (CategoryName)

  • categoryにはinstance variableは追加できない
  • classの拡張の用途で利用
  • 既存のクラスをサブクラスを生成せずにメソッドを追加できる
  • NSString-Utilities.hこのように+をいれたファイル名はカテゴリークラスの命名ルール

.mに@implementの上にある@interfaceはprivateメソッドで利用するものを定義するのに利用される。(class extension)

// class extension
@interface MyClass ()
// ここにprivate methodなどを宣言
- (void)doSomething;
@end

// category
@interface MyClass (CategoryName)
//
- (void)doSomething;
@end

typedef

typedef NSUInteger

class method , instance method

  • : class method
  • : instance method

Date

```

# AppDelegate class & ViewController class

* AppDelegate : アプリが起動した直後、停止、復旧の際に行う処理
* ViewController : 画面の操作に応じる処理を書く


# header file

import <フレームワーク/ファイル>

import ソースファイル

@interface クラス名 : スーパークラス名<プロトコル> { インスタンス変数宣言; } プロパティ変数宣言; メソッド宣言; @end


## IBOutlet & IBAction

@propertyに書いてある `IBOutlet`はコンパイラに指示するキーワードであり、コンパイルときには取り除かれて通常のプロパティ宣言と同じ書式になる

戻り値に`IBAction`も同様、部品のactionと接続するメソッドであることをコンパイラにしめす

@interface ViewController ()

//アウトレットと接続を示している。 @property (weak, nonatomic) IBOutlet UITextField *myTextField;

  • (IBAction)updateValue:(id)sender; // 戻り値の(IBAction)は部品のactionと接続するメソッドであることをコンパイラにしめす

//通常 @property (assign) NSInteger counter;

@end

@implementation

// storyboardからcontrolでつなげて作ったactionメソッドが @interface部分で作られるときには以下も同時に生成される。

  • (IBAction)updateValue:(id)sender {

}

@end


## sender
  • (IBAction)updateValue:(id)sender {

}

このような形だと
idタイプのsenderはそのままでは使えない
例えば sender.valueで sliderなとのOutletの値が取得できるが、idタイプにはvalueのメソッドはない。
なので、

1. このように、データ型を変更する
  • (IBAction)updateValue:(id)sender { UiSlider *mySlider = sender; } ```

  • そもそもメソッドを作るときにtypeを指定する

@interface
- (IBAction)updateValue:(UISlider *)sender;
//....

@implementation
- (IBAction)updateValue:(UISlider *)sender {
  UiSlider *mySlider = sender;
}
//...

Outlet Collection

複数の部品を配列で扱えるようになる。

@interface
@property (strong, nonatomic) IBOutletCollection(UITextField) NSArray *colorNames;
//...


@implementation
   for (UITextField *fld in _colorNames) {
        fld.placeholder = @"placeholder";
    }
//...

tag

複数のボタンを一つのactionに紐づけて tagをつける(10,11,12,13) それを switchで区分して処理するなどで利用できる。

@interface
- (IBAction)touchWordButton:(UIButton *)sender;
@end

@implementation
- (IBAction)touchWordButton:(UIButton *)sender {
    NSString *word;
    switch (sender.tag) {
        case 10:
            word = @"FLOWER";
            break;
        case 11:
            word = @"BIRD";
            break;
        case 12:
            word = @"WIND";
            break;
        case 13:
            word = @"MOON";
            break;
    }
    _wordLabel.text = word;
}
@end

UIViewController

イベント発生順

アプリが起動したとき

viewDidLoad
viewWillAppear
viewWillLayoutSubviews
viewDidLayoutSubivews
viewDidAppear

他のビューに移動したとき

viewWillDisappear
viewWillLayoutSubviews
viewDidLayoutSubviews
viewDidDisappear

説明

http://blog.77jp.net/iphone%E9%96%8B%E7%99%BA-uiviewcontroller-%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AB-viewdidload-viewwillappear-viewdidappear-viewwilldisappear-viewdiddisappear-ios-%E9%80%86

init(インスタンス作成時に呼び出したイニシャライザ) ↓ viewDidLoad ・View が初めて呼び出される時に1回だけ呼ばれます。 ・アプリ起動後に初めて当Viewが表示された場合に1度だけ呼ばれます。 ↓ viewWillAppear ・View が表示される直前に呼ばれるメソッド ・タブ等の切り替え等により、画面に表示されるたびに呼び出されます。 ・タブが切り替わるたびに何度でも呼ばれます。 ↓ viewDidAppear ・View の表示が完了後に呼び出されるメッソド ・タブ等の切り替え等により、画面に表示されるたびに呼び出されます。 ・タブが切り替わるたびに何度でも呼ばれます。 ↓ viewWillDisappear ・View が他のView (画面から消える) 直前に呼び出されるメッソド ・View が他のView (画面から消える) 直前に呼び出されるメッソド ・タブが切り替わるたびに何度でも呼ばれます。 ↓ viewDidDisappear ・View が他のView (画面から消えた) 非表示後に呼び出されるメッソド ・View が他のView (画面から消える) 直前に呼び出されるメッソド ・タブが切り替わるたびに何度でも呼ばれます。

results matching ""

    No results matching ""