我试图在viewDidLoad()之前加载它之后调用一个按钮函数:
@IBAction func tap(_ sender: UIButton) {
if(Date().dayNumberOfWeek() == 4) {
let alert = UIAlertController(title: "My Title", message: "This is my message.", preferredStyle: UIAlertControllerStyle.alert)
}
}
override func viewDidLoad() {
super.viewDidLoad()
tap(self)
这会返回Cannot convert value of type 'ViewController' to expected argument type 'UIButton'
我该如何解决这个问题?
答案 0 :(得分:4)
点击方法需要UIButton
。但是,在viewDidLoad
方法中,您使用self
UIViewController
调用了tap方法。它们是两个独立的类。
如果您不关心调用对象的类,可以将方法声明更改为
@IBAction func tap(_ sender: Any)
答案 1 :(得分:3)
错误很清楚。您正在将视图控制器传递给期望按钮的方法。
可能您的tap
操作已连接到用户界面中的某些UIButton
,这就是tap
方法期望UIButton
参数的原因。
由于您似乎希望从tap
手动调用此viewDidLoad
方法,因此您应该将引用传递给它所连接的按钮。
假设IBOutlet
有UIButton
,请将该出口传递给要点按的来电。
@IBOutlet var myButton: UIButton! // an example of your existing outlet
将viewDidLoad
中的行更改为:
tap(myButton)
将myButton
替换为插座的实际名称。
另一个选项是,因为您的tap
方法实际上并没有使用sender
参数,所以可以去除参数。
@IBAction func tap() {
// your existing code
}
然后在viewDidLoad
中你只需:
tap()
答案 2 :(得分:2)
大多数人都喜欢遵循将IBAction的代码提取到私有函数中的约定。
@IBAction func tap(_ sender: UIButton) {
presentAlertIfNecessary()
}
private func presentAlertIfNecessary() {
if(Date().dayNumberOfWeek() == 4) {
let alert = UIAlertController(title: "My Title", message: "This is my message.", preferredStyle: UIAlertControllerStyle.alert)
self.present(alert, animated: true)
}
}
这样您就可以在viewDidAppear中调用该函数。
override func viewDidAppear() {
presentAlertIfNecessary()
}
答案 3 :(得分:0)
编辑:
@IBAction func tap(_ sender: UIButton) {
if(Date().dayNumberOfWeek() == 4) {
let alert = UIAlertController(title: "My Title", message: "This is my message.", preferredStyle: UIAlertControllerStyle.alert)
self.present(alert, animated: true)
}
}
另外,请记住,您的代码在viewDidload中显示了一个UIAlertController,它可能不会显示为尚未加载视图层次结构,所以最好将代码放在viewDidAppear中,如下所示
override func viewDidAppear()
{
tap(UIButton())
}
还必须满足条件日期()。dayNumberOfWeek()== 4 才能看到警报
答案 4 :(得分:0)
该功能期待按钮类型。如果你有一个IBOUtlet按钮,你可以通过它。
class Controller: UIViewController {
@IBOutlet var button: UIButton!
@IBAction func tap(_ sender: UIButton) {
if(Date().dayNumberOfWeek() == 4) {
let alert = UIAlertController(title: "My Title", message: "This is my message.", preferredStyle: UIAlertControllerStyle.alert)
}
}
override func viewDidLoad() {
super.viewDidLoad()
tap(button)
}