在工具栏上单击完成按钮后,我希望UIPickerView被关闭(滑出视图).我将UIPickerView链接到UITextField的inputView,并将UIToolbar设置为UIPickerView的inputAccessoryView.但是,我的函数调用resignFirstResponder不会将UIPicker从视图中滑出.任何帮助,谢谢,提前谢谢!
import UIKit class ViewController: UIViewController,UIPickerViewDataSource,UIPickerViewDelegate { // Do any additional setup after loading the view,typically from a nib. //initialization constants let pickerView = UIPickerView() let textField = UITextField() let pickerData = ["1","2","three"] override func viewDidLoad() { //pickerview tool bar let toolbar = UIToolbar(frame: CGRectMake(0,320,44)) var items = [AnyObject]() //making done button let doneButton = UIBarButtonItem(title: "Done",style: .Plain,target: self,action: Selector(donePressed())) items.append(doneButton) toolbar.barStyle = UIBarStyle.Black toolbar.setItems(items,animated: true) //creating textfields with a pickerview pickerView.delegate = self pickerView.dataSource = self pickerView.frame = CGRectMake(0,500,300) textField.inputAccessoryView = toolbar textField.inputView = pickerView textField.frame = CGRectMake(200,55,100,35) textField.backgroundColor = UIColor.blueColor() //adding objs to viewController self.view.addSubview(textField) } func donePressed() { resignFirstResponder() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } //MARK: Data Sources UIPickerView extension ViewController: UIPickerViewDataSource { func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { return 1 } func pickerView(pickerView: UIPickerView!,numberOfRowsInComponent component: Int) -> Int { return pickerData.count } } //MARK: Delegates UIPickerView extension ViewController: UIPickerViewDelegate { // several optional methods: func pickerView(pickerView: UIPickerView,titleForRow row: Int,forComponent component: Int) -> String! { return pickerData[row] } func pickerView(pickerView: UIPickerView!,didSelectRow row: Int,inComponent component: Int) { textField.text = pickerData[row] } }
有两个问题:
原文链接:https://www.f2er.com/swift/318892.html>对于donePressed的选择器声明不正确.它应该是:
let doneButton = UIBarButtonItem(title: "Done",action: "donePressed")
>您需要在textField上调用resignFirstResponder():
func donePressed() { textField.resignFirstResponder() }
如果您有多个textField,并且您不想在resignFirstResponder调用中对textField进行硬编码,则可以执行以下操作:
>使您的ViewController成为UITextFieldDeletate:
class ViewController: UIViewController,UIPickerViewDelegate,UITextFieldDelegate {
>在UITextField上设置delegate属性:
textField.delegate = self
>将一个属性添加到ViewController以跟踪活动的UITextField:
var activeTextField:UITextField?
>实现textFieldDidBeginEditing并存储活动的UITextField:
func textFieldDidBeginEditing(textField: UITextField) { // became first responder activeTextField = textField }
>在donePressed中,调用activeTextField上的resignFirstResponder:
func donePressed() { activeTextField?.resignFirstResponder() }