无法在SWIFT中使用UipickerView委派文本字段

时间:2015-05-16 11:03:43

标签: swift delegates keyboard uipickerview

我目前正面临着迅速的问题。 我实现了一个方法,在returnkey tap上创建textfield next responder,并且o使它成为fonctional我必须让我的textfields委托(一切都在我的其他类上工作)。

问题是,我还实现了一个UIPickerView,当点击“textfieldcategorie”时出现,这个pickerview需要委托,将选择的值放在文本字段中。

顺便说一下,使textfield nextresponder不再工作的方法,在我把textfield放在委托中的那一刻,它变得不活跃。

这是使用的代码:

声明我的变量:

    @IBOutlet var textfieldcategorie: UITextField!
    @IBOutlet var keyword: UITextField!
    @IBOutlet var codepostal: UITextField!
    @IBOutlet var prix: UITextField!
    @IBOutlet var pickercategorie: UIPickerView! = UIPickerView()

显示uipickerview的方法:

    func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
            pickercategorie.hidden = false
            return false
        }

制作textfield nextresponder的方法:

func textFieldShouldReturn(textField: UITextField) -> Bool {
    //delegate method
    if textField == keyword {
    textfieldcategorie.becomeFirstResponder()
        }

    return true


}

}

我不知道它是否重要,但我也使用这些方法:

在键盘出现时向上移动文本字段:

   func textFieldDidBeginEditing(textField: UITextField) {
    animateViewMoving(true, moveValue: 25)
}

func textFieldDidEndEditing(textField: UITextField) {
    animateViewMoving(false, moveValue: 25)
}

func animateViewMoving (up:Bool, moveValue :CGFloat){
    var movementDuration:NSTimeInterval = 0.3
    var movement:CGFloat = ( up ? -moveValue : moveValue)
    UIView.beginAnimations( "animateView", context: nil)
    UIView.setAnimationBeginsFromCurrentState(true)
    UIView.setAnimationDuration(movementDuration )
    self.view.frame = CGRectOffset(self.view.frame, 0,  movement)
    UIView.commitAnimations()
}
//Fin Monter la vue lorsque le clavier apparait

并在视图中的任何位置点按键盘:

func DismissKeyboard(){
    //Causes the view (or one of its embedded text fields) to resign the first responder status.
    view.endEditing(true)
}

谢谢

1 个答案:

答案 0 :(得分:0)

我觉得您必须按如下方式更改代码:

func textFieldShouldReturn(textField: UITextField) -> Bool {
    //delegate method
    if textField === keyword {
        textfieldcategorie.becomeFirstResponder()
    }
    return true
}

原因是==运算符检查两个对象的相等性,但===运算符检查两个对象的标识,即这两个对象是否相同。

也请求改变:

@IBOutlet var pickercategorie: UIPickerView!