将 UITextField 的 inputView 属性设置为 UIPicker 在 Swift 中不起作用
Posted
技术标签:
【中文标题】将 UITextField 的 inputView 属性设置为 UIPicker 在 Swift 中不起作用【英文标题】:Setting UITextField's inputView property to a UIPicker not working in Swift 【发布时间】:2016-01-28 09:35:30 【问题描述】:您好,当用户单击文本字段时,我正在尝试以编程方式弹出 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.
【问题讨论】:
只是为了确定,文本字段是否正确链接?您还应该在工具栏中添加一个包含选择按钮的工具。让用户体验更好 如何添加工具栏? 我需要写一个答案给你看 好的,谢谢@Devster101 @Devster101 等待您的答复 【参考方案1】:您当前代码中的问题在于这种方法:
func textFieldShouldBeginEditing(textField: UITextField) -> Bool
itemPicker.hidden = false
return false // <--- this is not letting the textField become editable
我建议完全删除此方法。
【讨论】:
我不相信这个答案,我什至不认为这个方法应该在代码中。选择器应显示为输入视图。无需操纵它的隐藏属性 我同意。这种方法毫无意义。但是,我更多地指出了错误所在。 @DavidWilliames ...是的,它现在可以工作了...谢谢你..我删除了这个方法 @hellosheikh 太好了。不用担心。请将此答案标记为解决方案【参考方案2】:好的,所以我挖出了我写的类似的东西,它使用日期选择器,但一般代码是相同的。
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 替换为您的版本 genderTxtField 并将日期选择器更改为您的选择器。
不要忘记检查所有内容是否已链接
【讨论】:
不用担心,编码愉快【参考方案3】:itemPicker!.backgroundColor = UIColor.blackColor()
改成
itemPicker!.backgroundColor = UIColor.whiteColor()
然后删除
func textFieldShouldBeginEditing(textField: UITextField) -> Bool
itemPicker.hidden = false
return false
祝你好运!
【讨论】:
【参考方案4】:func textFieldShouldBeginEditing(textField: UITextField) -> Bool
itemPicker.hidden = false
return true
您只需将 func textFieldShouldBeginEditing
中的 false 更改为 true。
【讨论】:
以上是关于将 UITextField 的 inputView 属性设置为 UIPicker 在 Swift 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
UITextField inputView 在 Swift 中不起作用
iOS:自定义 UITextField 的 inputView 大小
UIPickerView 作为多个 UITextField 的 inputView
UITableView 作为 UITextField didSelectRowAtIndexPath 的 inputView 随机未触发