我正在使用 Swift 2 在 Xcode 7 中工作。
我在文本字段中设置了 UIPickerViews,它们都在正常工作。我使用以下方法关闭 pickerviews:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
pickerOptions.resignFirstResponder()
(etc.)
}
我的问题是我有一个 pickerview,我希望它成为一个“预设”菜单,它将通过选择一个 pickerview 值来用一组值更新 3 个常规文本字段输入,而无需使用按钮更新值。我不完全确定如何解决这个问题,因为我对代表还不是很熟悉(如果它甚至涉及他们的话)。我真的不知道如何更新/刷新 ViewController。
我猜它与 textFieldDidEndEditing
有关(因为我已经通过设置 UIPickerView 设置了这些类:UIPickerViewDataSource
、UIPickerViewDelegate
, UITextFieldDelegate
)感谢任何帮助:)
最佳答案
一切都与代表有关。我知道你有一个 pickerView 应该根据用户选择设置一些 textFields 的内容。 pickerView 是一个库存对象,它需要告诉您的类(class)正在发生什么,而无需了解您的类(class)的任何具体信息。它通过说,如果你实现我定义的这个协议(protocol),那么我会调用你的函数来让你知道。对于 pickerView,相关协议(protocol)是 UIPickerViewDelegate
,它公开了一个名为 delegate
的属性,该属性只能设置为实现该协议(protocol)的对象。如果设置了 pickerView 的委托(delegate),它将在用户滚动 pickerView 时调用该对象的 pickerView:didSelectRow:inComponent:
函数。
您只需创建一个符合 UIPickerViewDelegate
协议(protocol)的对象,并相应地设置 pickerView 的 delegate
属性。通常情况下,您只是将此功能添加到您的 viewController 中,如下所示:
class viewController: UIViewController, UIPickerViewDelegate {
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
// Now you can update the textField(s)
}
}
请注意,pickerView:didSelectRow:inComponent:
的定义被标记为可选。这意味着如果你说你实现了 UIPickerViewDelegate
,但没有定义它,编译器不会让你知道。如果您不小心拼错或签名错误,这可能会造成混淆 - 您会认为它已定义但永远不会被调用。
关于ios - 在没有按钮的情况下选择选项选择/关闭 UIPickerView 时更新文本字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35351797/