UITextField Swift中的ios – resignFirstResponder

在工具栏上单击完成按钮后,我希望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]
}
}
有两个问题:

>对于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()
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...