i phoneアプリ入門 第5回

31
第5回 iPhone勉強会 1 13414日日曜日

Upload: sachiko-kajishima

Post on 16-Jun-2015

437 views

Category:

Technology


0 download

DESCRIPTION

iPhone勉強会で使用した資料をシェアします。

TRANSCRIPT

Page 1: I phoneアプリ入門 第5回

第5回 iPhone勉強会

113年4月14日日曜日

Page 2: I phoneアプリ入門 第5回

・第6回 ユーザ操作(タップなど)の検出方法現在地の取得方法

・第7回 MapKitを使った地図の表示方法ブラウザでGoogleMapを表示する

今後の予定

213年4月14日日曜日

Page 3: I phoneアプリ入門 第5回

・質問への回答・前回の復習・テーブルビューの続き 詳細の表示 テーブルビューの編集(できれば)

今日のアジェンダ

313年4月14日日曜日

Page 4: I phoneアプリ入門 第5回

質問

1:効果音を鳴らしたい

2:@propertyをつける理由が不明

413年4月14日日曜日

Page 5: I phoneアプリ入門 第5回

質問1への回答

音を鳴らす方法はいくつかあります

ここではAudioToolBoxをつかいます。

513年4月14日日曜日

Page 6: I phoneアプリ入門 第5回

ライブラリと音ファイルを追加

効果音を鳴らす

613年4月14日日曜日

Page 7: I phoneアプリ入門 第5回

ソースコードはこんな感じ

//プロジェクトに追加したtap.aifというファイルを探す NSURL *tapSound = [[NSBundle mainBundle] URLForResource: @"tap" withExtension: @"aif"]; //下のレイヤが理解できるようにキャスト CFURLRef soundFileURLRef = (__bridge CFURLRef)tapSound; //soundIDを登録する SystemSoundID soundFileObject; AudioServicesCreateSystemSoundID (soundFileURLRef, &soundFileObject);

//soundIDに登録した音を鳴らす AudioServicesPlaySystemSound(soundFileObject);

713年4月14日日曜日

Page 8: I phoneアプリ入門 第5回

質問2への回答

@propertyのことを宣言プロパティといいます。

宣言プロパティと変数について解説します。

813年4月14日日曜日

Page 9: I phoneアプリ入門 第5回

Javaの世界では?

青い文字の変数はどこからアクセスできますか?public Class Test{ public String public_str; private String private_str;

public void publicProcess(){ String local;}}

913年4月14日日曜日

Page 10: I phoneアプリ入門 第5回

Objective-Cでは?

青い文字の変数はどこからアクセスできますか?#Member.h@interface Member:NSObject{ NSString *name;   }#Member.m@implemention: Member- (void)execute{ NSString *local_name;}

これだけだとヘッダ以外からアクセスできない

1013年4月14日日曜日

Page 11: I phoneアプリ入門 第5回

サンプルプログラム

Member.h/Member.m→setter/getterを自分で用意

MemberSecond.h/MemberSecond.m→setter/getterをコンパイラが作る

MemberThird.h/MemberThird.m→setter/getterをコンパイラが作る

1113年4月14日日曜日

Page 12: I phoneアプリ入門 第5回

1.自分でSetter/Getterを作るMember.hで変数およびsetter/getterを宣言

Member.mでsetter/getterを実装

numberのsetter/getterはどうなっている?

@interface Member : NSObject{ NSString *name; //名前 int number; //番号}-(NSString *)name;-(void)setName:(NSString *)aName;

-(NSString *)name{ return name;}-(void)setName:(NSString *)aName{ name = aName;}

1213年4月14日日曜日

Page 13: I phoneアプリ入門 第5回

1.自分でSetter/Getterを作るMember型のオブジェクトにアクセス

//Member型のオブジェクトを作成  Member *member = [[Member alloc]init]; //setterを使ってアクセス [member setName:@"Kajishima"]; [member setNumber:1];  //この形式でもOK(この形式はコンパイラが作ってくれる) member.name = @"Kajishima"; member.number = 1;

1313年4月14日日曜日

Page 14: I phoneアプリ入門 第5回

2.コンパイラに任せるMemberSecond.hで変数を宣言

MemberSecond.mで@synthesize宣言

@interface MemberSecond : NSObject{ NSString *name; //名前 int number; //番号}@property(nonatomic,strong) NSString* name;@property(nonatomic) int number;

@synthesize name;@synthesize number;

ヘッダで宣言した変数のsetter/getterを@propertyと

@synthesizeで宣言

変数のnameとプロパティのnameを別にすることもできる

1413年4月14日日曜日

Page 15: I phoneアプリ入門 第5回

3.コンパイラに任せるMemberThird.hで変数を宣言

@interface MemberThird :NSObject

@property(nonatomic,strong) NSString* name;@property(nonatomic) int number;

MemberThird.mで変数にアクセスできるか確認

name = @”Kajishima”;number = 0;

これだとコンパイルエラーになる

_name = @”Kajishima”;_number = 0; これだとOK

1513年4月14日日曜日

Page 16: I phoneアプリ入門 第5回

つまり@propretyは・・・

setter/getterを作るために必要

1613年4月14日日曜日

Page 17: I phoneアプリ入門 第5回

前回の復習

このようなテーブルを表示するアプリを作りましょう

1713年4月14日日曜日

Page 18: I phoneアプリ入門 第5回

前回の復習 その2

このようにテキストフィールドに値を入力するアプリ

を作ってください

1813年4月14日日曜日

Page 19: I phoneアプリ入門 第5回

TableViewの仕組み

1913年4月14日日曜日

Page 20: I phoneアプリ入門 第5回

実装するメソッド(復習)

numberOfRowsInSectionメソッド→指定したSectionに何行あるか

numberOfSectionsInTableViewメソッド→Sectionがいくつあるか

cellForRowAtIndexPathメソッド→指定したSection/行に該当するセル

2013年4月14日日曜日

Page 21: I phoneアプリ入門 第5回

TableViewの表示フロー

セクションの数は?

セクションの中に何行ある?

これから指定する位置のセルをください

2113年4月14日日曜日

Page 22: I phoneアプリ入門 第5回

テーブルのセルを選択する

ここではStoryBoardとprepareForSegueを使って詳細画面の設定を行います。

22

StoryBoardにViewControllerを追加して、cellと接続しましょう。

13年4月14日日曜日

Page 23: I phoneアプリ入門 第5回

テーブルのセルを選択する

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ MemberDetailViewController *nextController = (MemberDetailViewController*)segue.destinationViewController; //選択しているのが何行めかをセットする NSIndexPath *selectedIndexPath = self.tableView.indexPathForSelectedRow; nextController.selectedIndex = selectedIndexPath.row;}

次に表示するViewControllerへ何行目か教えてあげる

2313年4月14日日曜日

Page 24: I phoneアプリ入門 第5回

選択された先では・・・

-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; //TextFieldの値を設定 self.textField.text = [[MemberManager sharedInstance].members objectAtIndex:self.selectedIndex]; }

Viewを表示するときにArrayの情報を取得する

2413年4月14日日曜日

Page 25: I phoneアプリ入門 第5回

セルの中身を編集

こんな風にテキストフィールドで編集できるようにしてみましょう

さらに、Arrayの情報も書き換えます。

2513年4月14日日曜日

Page 26: I phoneアプリ入門 第5回

Arrayの情報を書き換える

-(BOOL)textFieldShouldReturn:(UITextField *)textField{ //キーパッドを消す [textField resignFirstResponder]; //シングルトンで持っている値を変更 [[MemberManager sharedInstance].members replaceObjectAtIndex:self.selectedIndex withObject:textField.text]; return NO;} replaceObjectAtIndexで値

を変更

2613年4月14日日曜日

Page 27: I phoneアプリ入門 第5回

セルをカスタマイズ

UITableViewCellのサブクラスを作るとカスタマイズ可能

LabelとImageを表示してみましょう。

MemberCellという名前でUITextViewCellのサブクラスを作成します。

2713年4月14日日曜日

Page 28: I phoneアプリ入門 第5回

セルをカスタマイズ

MemberCellというカスタマイズクラスを設定

LabelとImageを設定

2813年4月14日日曜日

Page 29: I phoneアプリ入門 第5回

こんな風に動いたでしょうか

2913年4月14日日曜日

Page 30: I phoneアプリ入門 第5回

データの中身を変えたら・・・

30

-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; //Tableの中身を更新 [self.tableView reloadData];}

reloadDataメソッドを使い、テーブルの内容を更新する

13年4月14日日曜日

Page 31: I phoneアプリ入門 第5回

ご清聴ありがとうございました

3113年4月14日日曜日