在工具栏上单击完成按钮后,我希望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() }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。