2016-08-26 74 views
-2

我是新的iOS开发swift 3 我想显示计算结果与UITextField,以便显示+ -/*底部我已经实现了一个工具栏上面的项目数量垫,但我不能与UITextField交互没有错误。 我通过了几个小时阅读,我发现一些解决方案与行动参数,但没有工作。如何与UITextField交互(Swift)

FUNC addDoneButtonOnNumpad(文本框:的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

+0

请修改您的问题以包含您的代码的TEXT版本,并指出您有错误的行。只有链接的问题是不好的,因为一旦链接过期,它们就变得毫无用处。 –

回答

0

首先改变你的selector这样的语法。

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

现在swift 3.0你需要传递的第一个参数的名称,因此,改变你的sayHello动作是这样的。

func sayHello(_ sender: UIBarButtonItem) { 
    theTextField.text = "Hello!" 
} 

注:参数类型的方法或者是AnyObjectUIBarButtonItem,而不是作为NSButton在上面的回答。

+0

感谢您的代码片段。我尝试了它的工作。 –

+0

您的回复帮助我理解了选择器的语法以及与按钮的交互,但我仍然陷入困境。 –

+0

然后你需要在你的新问题上添加新的帖子。 –

1

如果您想要连接到一个按钮,然后你会使用您使用的是操作的字符串格式的Objective-C的方法。 (虽然想起它,但我认为Swift 3正在放弃定义选择器的字符串风格,所以你应该养成总是使用#selector的习惯。)

对于Swift IBAction方法,最好使用#selector,这需要一个斯威夫特函数定义,像

#selector(sayHello(_:)) 

需要注意的是,除非你已经创建的UITextField的自定义子类,你不能发送邮件一样的sayHello到UITextField

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

你的代码可能是这样的:

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

,你可能会在你这样的视图控制器定义了一个sayHello方法:

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

附:不要发布代码的屏幕截图。将代码粘贴到您的问题中,选择它并使用代码工具将其格式化为源代码。如果你想显示错误,你可以包括一个屏幕截图,但总是把你的代码作为格式化文本的问题。

+0

感谢您的快速响应,我试图改变我的代码,但它无法使用选择器语法我是新的,所以我必须忘记一些东西。我没有创建UITextField的子类,我的最终目的是在UI文本字段中进行计算,例如5 + 7,但是我不能在故事板中创建按钮,因为我的工具栏是数字键盘的扩展。 –

+0

如果你是新手,那么你需要放慢速度。编辑你的问题,在底部显示你的新代码,以及你得到的错误。 –

+0

你刚刚说的几件事对我来说没有意义。你不会“在UITextField中进行计算”。您将在文本字段中显示计算结果。我也不明白你的意思是什么“...我的工具栏是数字键盘的延伸。” –