如何在Swift中按下返回键以执行与按下按钮相同的操作?


70

我想知道如何通过按下软件键盘上的返回键或点击UIButton来执行操作。

UI按钮已设置为执行IBAction。

我还如何允许用户按键盘上的Return键执行相同的操作?

Answers:


108

确保您的类扩展了UITextFieldDelegate协议

SomeViewControllerClass : UIViewController, UITextFieldDelegate

您可以执行以下操作:

override func viewDidLoad() {
    super.viewDidLoad()

    self.textField.delegate = self
}

func textFieldShouldReturn(textField: UITextField) -> Bool {

    //textField code

    textField.resignFirstResponder()  //if desired
    performAction()
    return true
}

func performAction() {   
    //action events
}

5
这个答案是正确的,但是您的视图控制器必须采用UITextViewDelegate协议
lborgav

实际上,视图控制器需要采用UITextFieldDelegate协议,并且工作正常
SergioAyestarán17年

同意,我因工作太疲倦。当我说“采用协议”时,我的意思实际上是@ csga5000所说的,继承协议UITextFieldDelegate如下:类myViewController:UIViewController,UITextFieldDelegate {},感谢您的纠正!
塞尔吉奥·艾斯塔斯塔(SergioAyestarán)

85

更新

如果您的部署目标是iOS 9.0或更高版本,则可以将文本字段的“已触发主要操作”事件连接到操作,如下所示:

连接主要动作触发事件

原版的

使您的视图控制器采用该UITextFieldDelegate协议。

将文本字段的委托设置为视图控制器。

实施textFieldShouldReturn:以号召您采取行动。


7

Swift 4.2:

通过编程创建的文本字段的其他方法不需要委托:

     MyTextField.addTarget(self, action: #selector(MyTextFielAction)
                               , for: UIControl.Event.primaryActionTriggered)

然后执行如下操作:

    func MyTextFielAction(textField: UITextField) {
       //YOUR CODE can perform same action as your UIButton
    }

5

如果您的部署目标是iOS 9.0或更高版本,则可以将文本字段的“已触发主要操作”事件连接到操作,如下所示:

我无法按照建议的方法启动“主要操作”。我使用了“ Edited Did End”,现在可以使用了。

在此处输入图片说明


1

这是一个完整的示例,包括:

  1. 重复按下按钮时,可进行写操作以及清除标签和文本的按钮操作,它将两个操作交替进行

  2. 按下键盘时返回键盘可触发操作,也辞职第一响应者

class ViewController: UIViewController, UITextFieldDelegate {
    
    @IBOutlet weak var textField1: UITextField!
    @IBOutlet weak var label1: UILabel!
    
    var buttonHasBeenPressed = false
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        textField1.delegate = self
    }
    
    
    @IBAction func buttonGo(_ sender: Any) {
        performAction()
    }
    
    
    
    
    
    
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        performAction()
        return true
    }
    
   
    func performAction() {
        buttonHasBeenPressed = !buttonHasBeenPressed
        
        if buttonHasBeenPressed == true {
            label1.text = textField1.text
        } else {
            textField1.text = ""
            label1.text = ""
        }
        
    }
    
}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.