2011-10-19
■[iPhoneアプリ開発][Objective-C]UIPickerViewその2 - IB未使用での実装
前回はIBを用いたUIPickerViewの設置でした。
今回はIBを用いないUIPickerViewの設置をします。
Pickerに表示される値に関してはその1を読んでください。
何度も書くのはめんどくさいので、今回は値の設定方法などは省略。
今回はIBを使わないのでtestViewController.xibは使用しません。
ではいきます。
testViewController.hを開きます。
ソースを見ましょう。
#import <UIKit/UIKit.h> @interface testViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource>{ UIPickerView *mypicker; } @property(nonatomic, retain) UIPickerView *mypicker; - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView; - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component; //- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component; 前回説明したので今回は使わない。 //メモリ解放メソッド -(void)dealloc; @end
UIPickerViewDelegateとUIPickerViewDataSourceですね。
そして今回使うメンバを宣言。
前回同様myPickerでいきます。
そしてプロパティでretain指定をします。
次にcommand+クリックで必須メソッドが書かれているページへ飛びます。
そこから
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
の2つをコピーペースト。
この2つのデリゲートメソッドは必須でしたね。
testViewController.hはこれでおしまいです。
次にtestViewController.mに移動しましょう。
まずソースをはっつけておきます。
#import "testViewController.h" @implementation testViewController @synthesize mypicker; - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Release any cached data, images, etc that aren't in use. } #pragma mark - View lifecycle //ビューが呼ばれる時に行う操作 - (void)viewDidLoad { [super viewDidLoad]; mypicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; //初期化+領域指定 mypicker.delegate = self; //自分自身をデリゲートに設定する。 mypicker.dataSource = self; //自分自身をデータソースに設定する。 mypicker.showsSelectionIndicator = YES; //現在選択している値にラインをあてるかどうか。 [self.view addSubview:mypicker]; //現在のviewに載っける。 } - (void)viewDidUnload { [super viewDidUnload]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ //列の値を返す。 return 1; } - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ //行の値を返す。2列ある場合の設定はその1の説明を呼んでください。 return 5; } -(void)dealloc{ //メモリ解放メソッド [mypicker release]; [super dealloc]; } @end
まず、@synthesizeでmypickerというインスタンス変数を使いますよーと宣言します。
そして今回は前回コメントアウトしてあった- (void)viewDidLoadを使用しましょう。
ここではViewが呼ばれた時の処理を書きます。
ボタン押して表示させたい場合はここではなく、ボタンを押した時に実行するメソッド内にPickerの生成を記述します。
それはまたの機会に説明します。今回はViewが呼ばれた時点でPickerを生成する事にします。
処理の流れとしては
1:Viewを呼ぶ。
2:Pickerを生成し、初期化し、インスタンス変数に格納。
3:自分自身をデリゲートに設定
4:自分自身をデータソースに設定
5:選択値のライン表示設定をON
6:生成したPickerを現在のViewに載っける
こんな感じです。
3〜5みたいな設定項目はどこで見つけてくるのか。
これが気になると思います。
自分もネットを徘徊しながら情報をかき集めていましたが、なんでこれが出てくるのかが書いていなくて困りました。
これを設定するといいですよ。と書かれていても、その情報源はどこなの?ってなりますよね。
別のパーツを組む時に困りますし・・・。
それはUIPickerView *という記述にカーソルを合わせてcommand+クリック
別画面に飛ぶと思います。
そこのpropertyを見てみると、英語ですが簡略説明が書かれています。
というわけでプロパティや使用できるメソッド、デリゲートメソッドに関しての情報は
調べたい型をcommand+クリックする事で得る事ができます。
あとはコメント欄のとおりです。ビルドして実行してみましょう。
以下の画面が出てきたら成功です。
今回は値を設定していないので、全部?で少し寂しいですね・・・w
お疲れ様でした。今回はこれで終了です。
次回からIBは使わない方向でいきます。
その3はエンドレスロールと初期値のセットについて書く予定です。
予定ですので変わるかもしれませんがw
それではまた。
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=float センターへ&source=web&cd=3&ved=0CDYQFjAC&url=http://d.hatena.ne.jp/NOZUSA/20110725/p1&ei=UYSfTr3LBIjprQfBqpiBAw&usg=AFQjCNFpYKSzXRNhF7Y8KmIyHjPU6y_k2A
- 1 http://d.hatena.ne.jp/captainshadow/edit?date=20111017
- 1 http://htn.to/qJNCrg
- 1 http://k.hatena.ne.jp/keywordblog/Objective-c
- 1 http://mixi.jp/redirect_check.pl?url=http://d.hatena.ne.jp/NOZUSA/20111019/p1&s_id=22&via=1&check_type=1&sig=00b108fa4410174cba2cb07761f4d6128a7ff0cd36a54bcd0d
- 1 http://search.yahoo.co.jp/search?ei=UTF-8&fr=crmas&p=PEE2
- 1 http://t.co/Y5DT7rwo
- 1 http://www.google.co.jp/m?ie=Shift_JIS&q=DAOコン+マイクロスイッチ+換え方
- 1 http://www.google.co.jp/search?q=float+センターへ
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=アルカルロプス&source=web&cd=6&ved=0CEgQFjAF&url=http://d.hatena.ne.jp/NOZUSA/20080610/p2&ei=LM2fTtOqCbT8iQLCpsh6&usg=AFQjCNE1-rVeJ6WpanQ4pnMGoyUE7umBXw

