【问题标题】:UITextField reference from rightView来自 rightView 的 UITextField 参考
【发布时间】:2015-06-12 07:17:45
【问题描述】:

我将UIButton 设置为UITextFieldrightView。此外,我正在设置通过

UIButton 添加目标操作
myButton.addTarget(self, action: "buttonPressed:", forControlEvents: .TouchUpInside)

我想知道如何从指定为buttonPressed 的方法访问UITextField,其方法签名如下所示:

func buttonPressed(sender: UIButton) {

}

我试过了

sender.superview as! UITextField

但我似乎收到了nil

另外,我无法使用标签,因为它已经用于其他目的。

编辑:

有关更多信息,myButton.addTarget() 发生在 UITableViewCell 内,这就是为什么我在视图控制器中没有 outletUITextField 的原因。

有人有什么想法吗?

【问题讨论】:

  • 为什么不能设置标签?
  • 如 OP 中所述,我将标签用于其他目的。

标签: ios swift uibutton uitextfield


【解决方案1】:

你的代码是正确的

我尝试如下,它对我有用

自定义textField

    var textFiled = UITextField(frame: CGRectMake(20.0, 50.0, 100.0, 33.0))
    textFiled.borderStyle = UITextBorderStyle.RoundedRect

    let purpleImageButton = UIButton(frame :CGRectMake(0, 0, 10, 30))
    purpleImageButton.backgroundColor = UIColor.blackColor()
    purpleImageButton.setTitle("T", forState: UIControlState.Normal)
    purpleImageButton.addTarget(self, action: "buttonPressed:", forControlEvents: .TouchUpInside)
    textFiled.rightViewMode = UITextFieldViewMode.Always
    textFiled.rightView = purpleImageButton
    self.view.addSubview(textFiled)

函数buttonPressed

func buttonPressed(sender: UIButton) {
    let textF : UITextField = sender.superview as UITextField
    textF.text = "Hello"
}

点击前

点击 textField 按钮后:

希望您能找到问题所在。

这里是 Xcode 6.1 版。因此,我的示例将按照 Swift 1.1 进行。

【讨论】:

  • 我刚试过这个,它似乎仍然返回 nil。
  • @coldbuffet 改变了答案