Hatena::ブログ(Diary)

LogicalCube このページをアンテナに追加 RSSフィード

2011-10-19

[][]UIPickerViewその2 - IB未使用での実装

前回はIBを用いたUIPickerViewの設置でした。

UIPickerViewその1


今回は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を見てみると、英語ですが簡略説明が書かれています。

詳細は公式のリファレンスを調べるか、ググるしかありませんw


というわけでプロパティや使用できるメソッド、デリゲートメソッドに関しての情報は

調べたい型をcommand+クリックする事で得る事ができます。


あとはコメント欄のとおりです。ビルドして実行してみましょう。

以下の画面が出てきたら成功です。

今回は値を設定していないので、全部?で少し寂しいですね・・・w


f:id:NOZUSA:20111019220822p:image


お疲れ様でした。今回はこれで終了です。

次回からIBは使わない方向でいきます。

その3はエンドレスロールと初期値のセットについて書く予定です。

予定ですので変わるかもしれませんがw


それではまた。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証