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

Posted

技术标签:

【中文标题】无法在 SWIFT 中使用 UipickerView 委派文本字段【英文标题】:Unable to delegate textfield with UipickerView in SWIFT 【发布时间】:2015-05-16 11:03:43 【问题描述】:

我目前在 swift 中遇到问题。 我实现了一种方法来使文本字段在返回键点击时成为下一个响应者,并且使它具有功能性,我必须让我的文本字段委托(一切都在我的其他类上工作)。

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

顺便说一句,使文本字段 nextresponder 不再工作的方法,在我将文本字段放入委托的那一刻,它变得不活动。

这是使用的代码:

我的变量声明:

    @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】:

我觉得你必须改变你的代码如下:

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

原因是 == 运算符检查两个对象的相等性,但 === 运算符检查两个对象的身份,即这两个对象是否引用同一个对象。

也请改变:

@IBOutlet var pickercategorie: UIPickerView!

【讨论】:

我试过了,现在当我点击关键字时,UIpicker 会出现而不是打开键盘。 不,对不起,也许我说错了,我只是想让我的文本字段委托工作,因为我有pickerview委托,当我尝试让我的文本字段委托时,它们变得不活动,顺便说一下移动视图或使文本字段成为下一个响应者的方法不再起作用

以上是关于无法在 SWIFT 中使用 UipickerView 委派文本字段的主要内容,如果未能解决你的问题,请参考以下文章

无法在目标 c 中使用类(swift)

无法在 Swift 3 中使用闭包语法

无法在 Swift 2 中使用参数列表调用“sendAsynchronousRequest”

无法在 iPhone 中使用 Swift 连接到 Parse

在 Swift 脚本中使用 CleanroomLogger 无法解析 DefaultLogConfiguration

使用 Swift 4.1 编译的模块无法在 Swift 3.2.3 中导入