如何与UITextField(Swift)进行交互

时间:2016-08-26 23:30:22

标签: ios swift swift3

我在iOS开发中使用swift 3是新手 我想用UITextField显示计算结果,所以要显示+ - / * bottom我已经实现了一个工具栏,上面有数字键盘,但是我没有错误地与UITextField交互。 我花了几个小时阅读,我找到了一些带有动作参数的解决方案,但都没有。

func addDoneButtonOnNumpad(textField:UITextField){

    let keypadToolbar: UIToolbar = UIToolbar()

    // add a done button to the numberpad
    keypadToolbar.items=[
        UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: textField, action: #selector(UITextField.resignFirstResponder)),
        UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil),

        UIBarButtonItem(title: "+", style: UIBarButtonItemStyle.done, target: self, action: #selector(self.addSum(_:))),
        UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil),
        UIBarButtonItem(title: "-", style: UIBarButtonItemStyle.done, target: textField, action: #selector(UITextField.resignFirstResponder)),
        UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil),
        UIBarButtonItem(title: "/", style: UIBarButtonItemStyle.done, target: textField, action: #selector(UITextField.resignFirstResponder)),
        UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil),
        UIBarButtonItem(title: "=", style: UIBarButtonItemStyle.done, target: textField, action: #selector(UITextField.resignFirstResponder))
    ]
    keypadToolbar.sizeToFit()
    // add a toolbar with a done button above the number pad
    textField.inputAccessoryView = keypadToolbar
}



@IBAction func addSum(_ sender: UITextField)
{

    sender.insertText("+")

}

我改变我的代码感谢NDoc现在我发现NSException类型的未捕获异常的错误我不知道什么是意思但我想可能像分段错误。

此外,我将我的IBAction与我想要互动的UIextfield相关联。 实际上我想在UITextField中为数字添加+或 - 或/或*,并用另一个数字进行数学运算并显示 结果在同一个UITextField中。

此致

http://i.stack.imgur.com/dIscv.png

2 个答案:

答案 0 :(得分:1)

如果你有一个Objective-C方法,你想要连接到一个按钮,那么你就可以使用字符串格式进行你正在使用的动作。 (虽然想到它,我认为Swift 3正在放弃定义选择器的字符串样式,所以你应该养成总是使用#selector的习惯。)

对于Swift IBAction方法,最好使用#selector,它采用Swift函数定义,如

#selector(sayHello(_:))

请注意,除非您已经创建了UITextField的自定义子类,否则您无法向UITextField发送类似sayHello的消息。

您通常会将视图控制器作为操作的目标,然后在视图控制器中实现一个处理操作的方法,并执行将消息安装到文本字段中的操作。

您的代码可能如下所示:

UIBarButtonItem(title: "Done",
  style: .done,
  target: self
  action:  #selector(sayHello(_:))

您可以在视图控制器中定义一个sayHello方法,如下所示:

@IBAction func sayHello(sender: NSButton) {
  theTextField.text = "Hello!"
}

P.S。不要发布代码的屏幕截图。将代码粘贴到您的问题中,选择它,然后使用代码工具将其格式化为源代码。如果您想显示错误,可以包括屏幕截图,但始终将您的代码作为格式化文本放入您的问题。

答案 1 :(得分:0)

首先改变你的Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click stopsearch = False Dim x As Single Dim startvalue As Single Dim endvalue As Single startvalue = Val(TextBox1.Text) endvalue = Val(TextBox2.Text) If TextBox4.Text <> "" Then ListView1.Items.Clear() ProgressBar1.Minimum = startvalue ProgressBar1.Maximum = endvalue Button1.Text = "Searching . . . " For x = startvalue To endvalue ProgressBar1.Value = x Dim f As String If stopsearch = True Then x = endvalue exit for End If f = TextBox3.Text + "-" + Trim(Str(x)) + "." + company If File.Exists(D_Drive + "\STORE-16\" + f) Then 'MsgBox(f) FileClose(30) FileOpen(30, D_Drive + "\store-16\" + f, OpenMode.Input) Try Dim sr As String = "" Do While Not EOF(30) sr = LineInput(30) If InStr(UCase(sr), UCase(TextBox4.Text)) > 0 Then Dim i As ListViewItem = ListView1.Items.Add(Str(x)) i.SubItems.Add(sr) Application.DoEvents() End If Loop Finally FileClose(30) End Try End If Next x Button1.Text = "Re-start Search " End If End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click stopsearch = True End Sub 语法。

selector

现在在UIBarButtonItem(title: "+", style: UIBarButtonItemStyle.done, target: self, action: #selector(self.sayHello(_:))) ,您需要传递第一个参数的名称,因此请更改此swift 3.0操作。

sayHello

注意:方法的参数类型为func sayHello(_ sender: UIBarButtonItem) { theTextField.text = "Hello!" } AnyObject,而不是上述答案中的UIBarButtonItem