2011-03-18 114 views
8

你怎麼做一個UIPickerView行爲就像一個與網頁視圖,其中有一個下拉選擇框,而不是在下降像往常一樣的網站做的iphone使得它成爲一個UIPickerView與所有的選擇中。當您選擇一個時,您的選擇旁將顯示一個檢查並更改下拉框的值。你怎麼把UIPickerView頂部的「完成」按鈕關閉UIPickerViewUIPickerView選擇和隱藏

我已經知道[pickerview setHidden:YES]是用來隱藏pickerview的方法。我只是不知道如何在UIPickerView中包含「完成」按鈕。

問候, 克里斯

回答

6

的 「完成」 按鈕被放置在UIToolBar。

使用下面的UIToolBar方法添加「完成」按鈕。

- (void)setItems:(NSArray *)items animated:(BOOL)animated { 

    UIToolbar* mypickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 56)]; 
    mypickerToolbar.barStyle = UIBarStyleBlackOpaque; 
    [mypickerToolbar sizeToFit]; 

    NSMutableArray *barItems = [[NSMutableArray alloc] init]; 

    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 
    [barItems addObject:flexSpace]; 

    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(DatePickerDoneClick)]; 
    [barItems addObject:doneBtn]; 

    [mypickerToolbar setItems:barItems animated:YES]; 

} 
+0

flexspace的目的是什麼?即使沒有它,它似乎也能工作?對於評論舊線索感到抱歉。 – KVISH 2012-10-26 00:11:45

+0

@KVISH彈性空間將完成按鈕刷新到右側 – 2013-03-29 11:24:50

+0

我在這裏沒有看到與UIPickerView的連接。 – VsMaX 2016-05-28 20:21:01

35

這段代碼會滑出一個選擇器視圖鍵盤和附着在它的上面一個完成按鈕。基本上,你想用你的輸入欄設置一個inputAccessoryView。 您應該在輸入字段的觸發事件中調用此方法。

- (IBAction)showYourPicker:(id)sender { 

// create a UIPicker view as a custom keyboard view 
UIPickerView* pickerView = [[UIPickerView alloc] init]; 
[pickerView sizeToFit]; 
pickerView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); 
pickerView.delegate = self; 
pickerView.dataSource = self; 
pickerView.showsSelectionIndicator = YES; 
self.yourPickerView = pickerView; //UIPickerView 

yourTextField.inputView = pickerView; 

// create a done view + done button, attach to it a doneClicked action, and place it in a toolbar as an accessory input view... 
// Prepare done button 
UIToolbar* keyboardDoneButtonView = [[UIToolbar alloc] init]; 
keyboardDoneButtonView.barStyle = UIBarStyleBlack; 
keyboardDoneButtonView.translucent = YES; 
keyboardDoneButtonView.tintColor = nil; 
[keyboardDoneButtonView sizeToFit]; 

UIBarButtonItem* doneButton = [[[UIBarButtonItem alloc] initWithTitle:@"Done" 
    style:UIBarButtonItemStyleBordered target:self 
    action:@selector(pickerDoneClicked:)] autorelease]; 

[keyboardDoneButtonView setItems:[NSArray arrayWithObjects:doneButton, nil]]; 

// Plug the keyboardDoneButtonView into the text field... 
yourTextField.inputAccessoryView = keyboardDoneButtonView; 

[pickerView release]; 
[keyboardDoneButtonView release]; 
} 

最後,你完成按鈕調用「pickerDoneClicked」的方法,你應該添加 [yourTextField resignFirstResponder];這將隱藏選擇器視圖。

+0

我錯過了什麼,導致你把自己的答案? – Jhaliya 2011-03-18 03:58:12

+1

對不起,我只是覺得很高興有不同的方法選擇。一個是在屏幕底部有一個工具欄,另一個是在鍵盤/ uipickerview頂部附加一個工具欄。 – 2011-03-18 15:09:56

+0

感謝您的額外信息雅各布。這真的很有幫助,但我相信最終方法的命令是 [mypicker setHidden:YES]; 我是否正確? – Tofu 2011-03-18 23:25:51