加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

UITextField Swift中的ios – resignFirstResponder

发布时间:2020-12-14 05:20:55 所属栏目:百科 来源:网络整理
导读:在工具栏上单击完成按钮后,我希望UIPickerView被关闭(滑出视图).我将UIPickerView链接到UITextField的inputView,并将UIToolbar设置为UIPickerView的inputAccessoryView.但是,我的函数调用resignFirstResponder不会将UIPicker从视图中滑出.任何帮助,谢谢,提前
在工具栏上单击完成按钮后,我希望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()
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读