en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

5.14.2011

UIPicker View 的基本設定方式

 

UIPick View 的作用類似於網頁上的下拉式選單(Option),使用捲軸滾動的方式選擇相同屬性內的不同數值,而此元件也可以直接從 Interface Builder 內拉出使用,其方式如下。

首先從  Interface Builder 的物件群內拉出 UIPick View 物件,接著按回到 ViewController.h 中設定代理與介面物件的 @property。

@interface UIPickerViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate> {

    NSArray *plurk;
    IBOutlet UILabel *plurkLabel;
    IBOutlet UIPickerView *plurkPicker;
}

@property (nonatomic, retain) UIPickerView *plurkPicker;
@property (nonatomic, retain) UILabel *plurkLabel;
@end

上述程式碼中的 NSArray 是用來存放 UIPick View 物件內的值,之後也將透過 NSArray 與 UIPick View 做互動,藉由 UIPick View 來決定索引 Index 再由 NSArray 中取出值並顯示。

再來回到 ViewController.m 中,將記憶體釋放與實做 @property 的方法處理好。

@synthesize plurkPicker, plurkLabel;

- (void)dealloc
{
    [plurk release];
    [plurkPicker release];
    [plurkLabel release];
    [super dealloc];
}

接著再程式進入點的地方設定好 NSArray 內的值與代理,就完成基本的環境設置。

plurk = [[NSArray alloc] initWithObjects:@"愛", @"喜歡", @"分享", @"給", @"討厭", @"想要", @"期待", @"需要", @"打算", @"希望", @"問", @"已經", @"曾經", @"好奇", @"覺得", @"想", @"說", @"正在", nil];

plurkPicker.dataSource = self;
plurkPicker.delegate = self;

下列程式碼將示範四個內建的函式,他們的主要作用是用來設定 UIPick View 一共有幾組選項(有幾個 NSArray)、每組選項的項目數目(NSArray 的長度)、將每個項目顯示於 UIPick View 上以及當選擇 UIPick View 內的項目時所會觸發的函式。

//內建的函式回傳UIPicker共有幾組選項
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 1;
}

//內建的函式回傳UIPicker每組選項的項目數目
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

    //第一組選項由0開始
    switch (component) {
        case 0:
            return [plurk count];
        break;

        //如果有一組以上的選項就在這裡以component的值來區分(以本程式碼為例default:永遠不可能被執行
        default:
             return 0;
        break;
    }
}

//內建函式印出字串在Picker上以免出現"?"
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    switch (component) {
        case 0:
            return [plurk objectAtIndex:row];
        break;

        //如果有一組以上的選項就在這裡以component的值來區分(以本程式碼為例default:永遠不可能被執行)
        default:
            return @"Error";
        break;
    }
}

//選擇UIPickView中的項目時會出發的內建函式
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    plurkLabel.text = [NSString stringWithFormat:@"%@ :", [plurk objectAtIndex:row]];
}

最後也可透過下列程式碼設定 UIPick View 內的初始值,讓程式在一顯示 UIPick View 時就會自動捲動到該預設值。

//設定UIPicker所要顯示的內定值
[plurkPicker selectRow:16 inComponent:0 animated:YES];

注意在設定起始值時,必須小心不可以超過陣列的範圍,上述程式碼有由於只有一組選項,所以在 inComponent 值設定為 0,表示是第一組選項的第 16 的值。






沒有留言:

張貼留言