Download - I phoneアプリ入門 第5回
第5回 iPhone勉強会
113年4月14日日曜日
・第6回 ユーザ操作(タップなど)の検出方法現在地の取得方法
・第7回 MapKitを使った地図の表示方法ブラウザでGoogleMapを表示する
今後の予定
213年4月14日日曜日
・質問への回答・前回の復習・テーブルビューの続き 詳細の表示 テーブルビューの編集(できれば)
今日のアジェンダ
313年4月14日日曜日
質問
1:効果音を鳴らしたい
2:@propertyをつける理由が不明
413年4月14日日曜日
質問1への回答
音を鳴らす方法はいくつかあります
ここではAudioToolBoxをつかいます。
513年4月14日日曜日
ライブラリと音ファイルを追加
効果音を鳴らす
613年4月14日日曜日
ソースコードはこんな感じ
//プロジェクトに追加した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日日曜日
質問2への回答
@propertyのことを宣言プロパティといいます。
宣言プロパティと変数について解説します。
813年4月14日日曜日
Javaの世界では?
青い文字の変数はどこからアクセスできますか?public Class Test{ public String public_str; private String private_str;
public void publicProcess(){ String local;}}
913年4月14日日曜日
Objective-Cでは?
青い文字の変数はどこからアクセスできますか?#Member.h@interface Member:NSObject{ NSString *name; }#Member.m@implemention: Member- (void)execute{ NSString *local_name;}
これだけだとヘッダ以外からアクセスできない
1013年4月14日日曜日
サンプルプログラム
Member.h/Member.m→setter/getterを自分で用意
MemberSecond.h/MemberSecond.m→setter/getterをコンパイラが作る
MemberThird.h/MemberThird.m→setter/getterをコンパイラが作る
1113年4月14日日曜日
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日日曜日
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日日曜日
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日日曜日
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日日曜日
つまり@propretyは・・・
setter/getterを作るために必要
1613年4月14日日曜日
前回の復習
このようなテーブルを表示するアプリを作りましょう
1713年4月14日日曜日
前回の復習 その2
このようにテキストフィールドに値を入力するアプリ
を作ってください
1813年4月14日日曜日
TableViewの仕組み
1913年4月14日日曜日
実装するメソッド(復習)
numberOfRowsInSectionメソッド→指定したSectionに何行あるか
numberOfSectionsInTableViewメソッド→Sectionがいくつあるか
cellForRowAtIndexPathメソッド→指定したSection/行に該当するセル
2013年4月14日日曜日
TableViewの表示フロー
セクションの数は?
セクションの中に何行ある?
これから指定する位置のセルをください
2113年4月14日日曜日
テーブルのセルを選択する
ここではStoryBoardとprepareForSegueを使って詳細画面の設定を行います。
22
StoryBoardにViewControllerを追加して、cellと接続しましょう。
13年4月14日日曜日
テーブルのセルを選択する
-(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日日曜日
選択された先では・・・
-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; //TextFieldの値を設定 self.textField.text = [[MemberManager sharedInstance].members objectAtIndex:self.selectedIndex]; }
Viewを表示するときにArrayの情報を取得する
2413年4月14日日曜日
セルの中身を編集
こんな風にテキストフィールドで編集できるようにしてみましょう
さらに、Arrayの情報も書き換えます。
2513年4月14日日曜日
Arrayの情報を書き換える
-(BOOL)textFieldShouldReturn:(UITextField *)textField{ //キーパッドを消す [textField resignFirstResponder]; //シングルトンで持っている値を変更 [[MemberManager sharedInstance].members replaceObjectAtIndex:self.selectedIndex withObject:textField.text]; return NO;} replaceObjectAtIndexで値
を変更
2613年4月14日日曜日
セルをカスタマイズ
UITableViewCellのサブクラスを作るとカスタマイズ可能
LabelとImageを表示してみましょう。
MemberCellという名前でUITextViewCellのサブクラスを作成します。
2713年4月14日日曜日
セルをカスタマイズ
MemberCellというカスタマイズクラスを設定
LabelとImageを設定
2813年4月14日日曜日
こんな風に動いたでしょうか
2913年4月14日日曜日
データの中身を変えたら・・・
30
-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; //Tableの中身を更新 [self.tableView reloadData];}
reloadDataメソッドを使い、テーブルの内容を更新する
13年4月14日日曜日
ご清聴ありがとうございました
3113年4月14日日曜日