2015-07-30 17 views
36

Kullanıcıların bir UITextField'a dokunduğunda görünmesi için bitmiş bir düğmeyle UIPickerView yapmakta zorluk çekiyorum. Bu benim kodum şu ana kadar. Her şey iyi bir şey oluşturuyor, ancak metin alanına dokunduğumda, klavye görünür, seçici değil.Bitti düğmeli bir UIPickerView nasıl oluşturulur?

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 


@IBOutlet var textField1: UITextField! 

let pickerData = ["11", "12", "13"] 





@IBAction func textButton(sender: AnyObject) { 

    let picker: UIPickerView 
    picker = UIPickerView(frame: CGRectMake(0, 200, view.frame.width, 300)) 
    picker.backgroundColor = .whiteColor() 

    picker.showsSelectionIndicator = true 
    picker.delegate = self 
    picker.dataSource = self 

    let toolBar = UIToolbar() 
    toolBar.barStyle = UIBarStyle.Default 
    toolBar.translucent = true 
    toolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1) 
    toolBar.sizeToFit() 

    let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "donePicker") 
    let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) 
    let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: "donePicker") 

    toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false) 
    toolBar.userInteractionEnabled = true 

    textField1.inputView = picker 
    textField1.inputAccessoryView = toolBar 




} 



override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
    return 1 
} 

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return pickerData.count 
} 

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    return pickerData[row] 
} 

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    textField1.text = pickerData[row] 
} 

func donePicker() { 

    textField1.resignFirstResponder() 

} 




} 
+0

textButton yöntemini nerede arıyorsunuz? – iAnurag

cevap

84

let picker: UIPickerView 
picker = UIPickerView(frame: CGRectMake(0, 200, view.frame.width, 300)) 
picker.backgroundColor = .whiteColor() 

picker.showsSelectionIndicator = true 
picker.delegate = self 
picker.dataSource = self 

let toolBar = UIToolbar() 
toolBar.barStyle = UIBarStyle.Default 
toolBar.translucent = true 
toolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1) 
toolBar.sizeToFit() 

let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "donePicker") 
let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) 
let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: "donePicker") 

toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false) 
toolBar.userInteractionEnabled = true 

textField1.inputView = picker 
textField1.inputAccessoryView = toolBar 
+0

Teşekkürler! İşe yarıyor! –

+0

Muhtemelen farklı bir iplik için. Ancak yukarıdaki örnek kullanılarak bittiğinde, uipickerview öğesi seçili değil. Bunu nasıl yaparım? – VBaarathi

+0

Müthiş. Katı örnek. Yardımı takdir ediyorum. – jonthornham

7

İnsanlar VBaarathi swift3

yılında

istedi aynı şeyi soracaktım diğer sorulara kodu buraya kullanıyor görünüyor yerine yöntemin sizin viewDidLoad() Bu kodu

let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(donePicker)) 
let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) 
let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: #selector(donePicker)) 

Daha sonra aşağıdakileri aynı swi'ye yazabilirsiniz. ft dosyası

func donePicker (sender:UIBarButtonItem) 
{ 
    // Put something here 
} 
2

Swift 3x:

müthiş cevabı zaten verilmiş ancak burada farklı bir yaklaşımdır, yalnızca bir pickerView yapmak ve bunun gibi inputView ve inputAccessoryView vermek:

YOUR_TEXTFIELD_NAME.inputView = picker 


func addKeyboardToolBar() { 
var nextButton: UIBarButtonItem? 
var keyboardToolBar = UIToolbar(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(pickerView.frame.size.width), height: CGFloat(25))) 
keyboardToolBar.sizeToFit() 
keyboardToolBar.barStyle = .default 
daysHourTextField.inputAccessoryView = keyboardToolBar 
nextButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(self.textFieldShouldReturn)) 
keyboardToolBar.items = [UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil), nextButton] 
} 
1

Bitti düğmeli UIPickerView? Swift4

1. Adım: ViewController'da txt_pickUpData adlı bir textFiled adında bir dosya eklenir ve IBOutlet bağlantısı verilir ve yetki verilir. Ayrıca bir UIDatePicker değişkeni de alır. ve seçici diskte görüntülenen dize değeri olan bir Array alın.

@IBOutlet weak var txt_pickUpData: UITextField! 
var myPickerView : UIPickerView! 
var pickerData = ["Hitesh Modi" , "Kirit Modi" , "Ganesh Modi" , "Paresh Modi"] 

Adım 2: Ayrıca UIPickerView ve UITextFiled temsilcilerinin eklenmesi.

class ViewController: UIViewController , UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate{ 

Adım 3: ToolBar ile UIPickerView oluşturmak için işlev işareti.

func pickUp(_ textField : UITextField){ 

// UIPickerView 
self.myPickerView = UIPickerView(frame:CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 216)) 
self.myPickerView.delegate = self 
self.myPickerView.dataSource = self 
self.myPickerView.backgroundColor = UIColor.white 
textField.inputView = self.myPickerView 

// ToolBar 
let toolBar = UIToolbar() 
toolBar.barStyle = .default 
toolBar.isTranslucent = true 
toolBar.tintColor = UIColor(red: 92/255, green: 216/255, blue: 255/255, alpha: 1) 
toolBar.sizeToFit() 

// Adding Button ToolBar 
let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(ViewController.doneClick)) 
let spaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) 
let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(ViewController.cancelClick)) 
toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false) 
toolBar.isUserInteractionEnabled = true 
textField.inputAccessoryView = toolBar 

} 

Adım 4: UIPickerView ait temsilci ve veri kaynağı yöntemleri ekleme UIPickerView tekerlek verileri görüntülemek için kullanılır.

//MARK:- PickerView Delegate & DataSource 
func numberOfComponents(in pickerView: UIPickerView) -> Int { 
return 1 
} 
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
return pickerData.count 
} 
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
return pickerData[row] 
    } 
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
self.txt_pickUpData.text = pickerData[row] 
} 
//MARK:- TextFiled Delegate 

func textFieldDidBeginEditing(_ textField: UITextField) { 
self.pickUp(txt_pickUpData) 
} 

Adım 5: ToolBar'da bulunan iki düğme yöntemi ekleme. Biri tıklandığında, diğeri de iptal edilir. Hangi UIPickerView işten çıkarılır.

func doneClick() { 
    txt_pickUpData.resignFirstResponder() 
} 
func cancelClick() { 
    txt_pickUpData.resignFirstResponder() 
} 

Adım 6: UITextField temsilci yönteminde teslim alma işlevinin çağrılması.

func textFieldDidBeginEditing(_ textField: UITextField) { 
self.pickUp(txt_pickUpData) 
} 

Sadece kopyalayıp kodunuza yapıştırın.

İlgili konular