Swift 3 iOS 10:我想在UIPickerView
中添加UIAlertView
,以便我可以选择项目并将其值设置为textField。我可以用UIView
来做,但我想以更好更自然的方式改进它。有可能做到这一点或任何出路?
提前感谢!
这就是我所做的,
答案 0 :(得分:1)
尽管Apple建议我们不要这样做,但您确实可以向警报视图控制器添加选择器视图。除了普通的视图控制器之外,UIAlertViewController
没有什么神奇之处。您需要做的就是显示带有许多新行的标题文本(即"选择\ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n&n")为了提高警报高度,然后调用alertViewController.addSubview(datePicker)
但是问题是为什么你需要编写额外的代码来操作警报视图控制器并处理哪个文本字段来设置值?这是另一种更容易维护和实施的方法。
首先创建选择器视图并进行配置。
let picker = UIPickerView()
picker.delegate = self
picker.dateSource = self
// configure
然后,对于每个文本字段,只需调用此
即可tf1.tag = 1
tf2.tag = 2
tf3.tag = 3
tf1.delegate = self
tf2.delegate = self
tf3.delegate = self
tf1.inputView = picker
tf2.inputView = picker
tf3.inputView = picker
不在您的文本字段委托方法中,存储用户点击的文本字段并重新加载选择器视图数据
var tfTag = 0
func textFieldDidBeginEditing(_ textField: UITextField) {
tfTag = textField.tag
picker.reloadAllComponents()
}
最后在所有选择器视图数据源或委托方法中,根据每个文本字段中的唯一标记号加载不同的数据集
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if tfTag == 0 {
if component == 0 {
return "1"
}else if component == 1 {
return "2"
}else if component == 2 {
return "3"
}else{
return "4"
}
}else if tfTag == 1 {
//...
}else{
//...
}
}