iOS - 按下按钮时关闭键盘

3

我目前有一个 textfield,一个 picker,一个 button,以及几个 textviews/labels

textfield 提示只输入数字键盘,我希望在按下一个按钮时键盘会消失。

这是一部分代码:

class ViewController: UIViewController, UITextFieldDelegate, UIPickerViewDataSource, UIPickerViewDelegate  {

    @IBOutlet weak var provincePicker: UIPickerView!

    @IBOutlet weak var calcButton: UIButton!

    @IBOutlet weak var incomeLabel: UITextView!

    @IBOutlet weak var salaryTextField: UITextField!
    @IBOutlet weak var beforeTax: UITextView!
    @IBOutlet weak var provincialTax: UITextView!
    @IBOutlet weak var federalTax: UITextView!
    @IBOutlet weak var afterTax: UITextView!

...

    override func viewDidLoad() {
  //  numberOnly()
         borders()
         super.viewDidLoad()
         provincePicker.dataSource = self
         provincePicker.delegate = self
    }

...

     @IBAction func calculateButton(sender: UIButton) {
         let formatter           = NSNumberFormatter()
         formatter.numberStyle   = NSNumberFormatterStyle.CurrencyStyle
         formatter.locale        = NSLocale(localeIdentifier: "en_CA")

         let index = provincePicker.selectedRowInComponent(0)

         switch(index) {
         case 0:
            calculate(abBrackets, rates: abRates)   //AB
         //cutting out code here
         dismissKeyboard()
      }

      func dismissKeyboard() {
         self.view.endEditing(true)
      }

在你的 main.storyboard 文件中,检查一下你的按钮是否有多个连接... - Thomas
按钮仅参考 outlet 是 calcButton 函数,我尝试在该函数末尾添加 self.view.endEditing(true),但没有效果。 - Arthur
你到底想要什么,出了什么问题?你是想在用户按下“1”按钮时关闭键盘,就像你在问题中提到的那样,还是当他们按下“calculateButton”时关闭? - Eendje
@Eendje 我想要的是当calculateButton被按下时,键盘消失。与之相连的calculateButton函数调用了另一个带有一些数学运算的函数,但我也希望在这里键盘消失,因为键盘会遮盖结果。 - Arthur
3个回答

6

当您的按钮被按下时,请尝试调用此函数:

    func dismissKeyboard() {
        self.view.endEditing(true)
    }

或者,在您的按钮功能中,执行以下操作:
@IBAction func button(sender: UIButton) {
    self.view.endEditing(true)
}

请记得通过在按钮上按住控制键并将其拖动到您的控制器文件中来将按钮连接到您的视图控制器,然后在弹出窗口上单击 connection,选择 action 并为其命名:

enter image description here

此外,请检查您的按钮是否有多个连接,这可能是一个问题...

1
@MrHaze 哎呀,我没注意到,抱歉,我给你点赞了。 - Thomas
我尝试将self.view.endEditing代码添加到已经从按钮ctrl-dragged的函数中,但是那行代码导致了崩溃并将我带到了appdelegate.swift文件中。'未识别的选择器发送到实例'。 - Arthur
1
你收到了什么崩溃信息? - MrHaze
2
我认为你的 salaryTaxField 没有正确连接,先移除所有连接然后重新连接。 在你的代码中,你应该看到一个填充的圆圈在 @IBOutlet weak var salaryTextField: UITextField! 旁边,如果它没有填充,那就意味着它没有连接到 UI 元素。 - MrHaze
1
这些小事情需要时间 :) 另外,@arthur请将Thomas的答案设置为正确答案,他的回答对其他读者更清晰。 - MrHaze
显示剩余6条评论

3

当按钮被点击时,您只想结束编辑。

您可以通过调用endEditing(force: Bool)函数来实现:

这会导致视图(或其嵌入的文本字段)放弃第一响应者状态。

使用方法如下:

@IBAction func didTapBtn(sender: UIButton) {
    self.view.endEditing(true)
}

2
你的按钮需要连接到 @IBAction。它可能已经连接到其他东西了。在界面构建中,你可能想要 ctr+click 按钮,然后删除所有连接,再将其连接到 @IBAction - MrHaze
看看这个:http://rshankar.com/different-ways-to-connect-ibaction-to-uibutton/ - MrHaze

1
首先,CTRL-DRAG一个目标操作(或在代码中使用addTarget...函数)。其次,在您的代码中像这样操作:
self.inputTextField.resignFirstResponder()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接