我在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中。
此致
答案 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
。