UITextField Swift中的ios – resignFirstResponder

前端之家收集整理的这篇文章主要介绍了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()
}
原文链接:https://www.f2er.com/swift/318892.html

猜你在找的Swift相关文章