我正在另一个与主ViewController相对的文件中创建一个UIButton。我创建了这个按钮
var newNoteButton = UIButton(frame: CGRectMake(5, 18, 152.5, 37))
newNoteButton.backgroundColor = UIColor.grayColor()
newNoteButton.addTarget(self, action: ("newNoteButtonAction:"), forControlEvents: UIControlEvents.TouchUpInside)
newNoteButton.setTitle("New Note", forState: UIControlState.Normal)
newNoteButton.userInteractionEnabled = true
self.view.addSubview(newNoteButton)
行动
func newNoteButtonAction (sender: UIButton!){
println("New Note")
}
即使将相同的代码复制并粘贴到我的ViewController中,也会抛出上述错误,它根本不会标记我。它为什么这样做?它只是打印出字符串“New Note”,但有些东西会导致Thread 1排队。
编辑: 经过一些阅读,我已经能够将代码量减少到这个:
var newNoteButton = UIButton(frame: CGRectMake(5, 18, 152.5, 37))
newNoteButton.backgroundColor = UIColor.grayColor()
newNoteButton.addTarget(self, action: ("newNoteButtonAction:"), forControlEvents: UIControlEvents.TouchUpInside)
和此:
func newNoteButtonAction (sender: UIButton!){
println("New Note")
}
我尝试删除操作,问题仍然存在。这存在于我的textView类中的单独文件中。在我的AppDelegate文件中,Root View Controller是ViewController。如果我将按钮移动到ViewController,问题就不会出现。我的ViewController中唯一的代码就是这个
import Foundation
import UIKit
class ViewController: UIViewController, UITextViewDelegate, UIScrollViewDelegate {
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
//Global Variables
var scrollView = UIScrollView()
override func viewDidLoad(){
super.viewDidLoad()
//Add textView
//let textViewRef = textView() Removed to test
//self.view.addSubview(textViewRef.view)
//Button Code
var newNoteButton = UIButton(frame: CGRectMake(5, 18, 152.5, 37))
newNoteButton.backgroundColor = UIColor.grayColor()
newNoteButton.addTarget(self, action: ("newNoteButtonAction:"), forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(newNoteButton)
}
func newNoteButtonAction (sender: UIButton!){
println("New Note")
}
}
我已尝试在操作中弄乱条件和分号,但这似乎不会影响它或以任何方式提供帮助。如果您需要更多信息,请随时提出。
编辑2
我的其他View Controller如下所示:
import Foundation
import UIKit
class textView: UIViewController {
//Globals
var newNoteButton = UIButton()
override func viewDidLoad()
newNoteButton = UIButton(frame: CGRectMake(5, 18, 152.5, 37))
newNoteButton.backgroundColor = UIColor.grayColor()
newNoteButton.addTarget(self, action: ("newNoteButtonAction:"), forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(newNoteButton)
}
func newNoteButtonAction (sender: UIButton!){
println("New Note")
}
}
编辑3:我刚才注意到这些信息可能有点相关。错误发生在我的委托文件中的class AppDelegate
行。
答案 0 :(得分:0)
我遇到了同样的问题而且我收到了与你相同的错误。我想在其他课程中创建一个按钮。我建议你阅读我的解决方案:How invoke a method in the method addTarget of the Button class when I create programmatically the button in a plain class in Swift。摘要,你应该继承" UIClass"你需要的。如果你想创建一个按钮,你应该继承" UIButton"类。然后,设置此类的属性值,而不是创建按钮。
答案 1 :(得分:0)
对于今后遇到此问题的任何人来说,通常可以将其调试回保留您要添加目标的类中的按钮。
尝试将按钮或目标类的声明移动到全局类,以便在处理视图后进行清理。
示例:在上面列出的实例中,在类级别而不是在newNoteButton
函数内声明viewDidLoad
,以确保它可以保留,同时可以调用它的目标。
class ViewController: UIViewController, UITextViewDelegate, UIScrollViewDelegate {
// Global Variables
var scrollView = UIScrollView()
var newNoteButton: UIButton! // <- Declare button here instead of in viewDidLoad
}