簡體   English   中英

將 UITextField 的 inputView 屬性設置為 UIPicker 在 Swift 中不起作用

[英]Setting UITextField's inputView property to a UIPicker not working in Swift

您好,我正在嘗試在用戶單擊文本字段時以編程方式彈出UIPickerView視圖。 我試過這個,但它沒有做任何事情,它不起作用。 當我點擊文本框時什么也沒有發生

class UserProfileTableViewController: UITableViewController,UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource {
 var itemPicker: UIPickerView! = UIPickerView()
    
    @IBOutlet weak var genderTxtField: UITextField!
   
    
    var gender = ["MALE","FEMALE"]
    override func viewDidLoad() {
        super.viewDidLoad()
       
        genderTxtField.delegate = self
        
        itemPicker!.delegate = self
        itemPicker!.dataSource = self
        itemPicker!.backgroundColor = UIColor.blackColor()
    
        self.genderTxtField.inputView = itemPicker
    }
    
    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{
        return 1
    }
    
    // returns the # of rows in each component..
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
        return gender.count
    }
    
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return gender[row]
    }
    
    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
    {
        genderTxtField.text = gender[row]
        //.hidden = true;
    }
    
    func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
        itemPicker.hidden = false
        return false
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

您當前代碼中的問題在於此方法:

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
    itemPicker.hidden = false 
    return false // <--- this is not letting the textField become editable
}

我建議完全刪除此方法。

好的,所以我挖出了我寫的類似的東西,它使用日期選擇器,但一般代碼是相同的。

var datePicker: UIDatePicker!
@IBOutlet var dateFrom: UITextField!

override func viewDidLoad() {
   super.viewDidLoad()
   self.setUpDatePicker()
}

func setUpDatePicker() {
        datePicker.datePickerMode = UIDatePickerMode.Date
        let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 0, height: 44))
        let doneBtn = UIBarButtonItem(title: "Select", style: UIBarButtonItemStyle.Done, target: self, action: "selectDate")
        let space = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)

        toolBar.setItems([space, doneBtn], animated: false)

        YOURTEXTFIELD.inputAccessoryView = toolBar
        YOURTEXTFIELD.inputView = datePicker             
    }

然后你添加一個函數來處理完成按鈕的按下

func selectDate() {
        let formatter = NSDateFormatter()
        formatter.dateFormat = "dd-MM-yyyy";

        YOURTEXTFIELD.text = formatter.stringFromDate(datePicker.date)
        YOURTEXTFIELD.resignFirstResponder()
    }

只需將 YOURTEXTFIELD 替換為您的版本 sexTxtField 並將日期選擇器更改為您的選擇器。

不要忘記檢查一切是否已鏈接

itemPicker!.backgroundColor = UIColor.blackColor() 

改成

 itemPicker!.backgroundColor = UIColor.whiteColor()

然后刪除

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
    itemPicker.hidden = false
    return false
}

祝你好運!

func textFieldShouldBeginEditing(textField: UITextField) -> Bool 
{
    itemPicker.hidden = false 
    return true
}

您只需要在func textFieldShouldBeginEditing中將 false 更改為 true 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM