立即调用 UITapGestureRecognizer
UITapGestureRecognizer called immediately
我正在尝试将 UITapGestureRecognizer
添加到 imageview
,如下所示
let gest=UITapGestureRecognizer(target: self, action: Selector(imgPressed()));
gest.delegate=self
thalaImg.addGestureRecognizer(gest)
这里是 imgPressed
函数:
func imgPressed()
{
let alert=UIAlertController(title: "Img", message: "img pressed", preferredStyle: .Alert)
let okButton=UIAlertAction(title: "Ok", style: .Default, handler: nil)
alert.addAction(okButton)
presentViewController(alert, animated: true, completion: nil)
}
我在 viewdidload
中添加了 3 行代码,添加了一个断点和 运行 我观察到 application.What 一旦编译器到达第一行,即让 gest。 ..,它甚至在应用程序启动之前立即调用操作方法 running.Since 显然 window
尚未加载,它会抛出以下警告
Warning: Attempt to present on whose view is not in the window hierarchy!
我不明白为什么会这样。有人可以帮我解决这个问题吗?
谢谢
您应该使用以下语法:
let gest = UITapGestureRecognizer(target: self, action: #selector(imgPressed))
请注意,Selector
可以接受初始类型 Void
以及 String
。正确的旧式 Selector
初始化如下所示:
let action: Selector = Selector("imgPressed")
现在您可以检查一下,如果您尝试将新样式与旧样式结合使用,您将得到编译错误:
let action = Selector(imgPressed) // Error!
有趣的是,您可能会尝试通过附加括号来解决此错误,之后您将不会再有任何错误!但这完全没有用。看下面3行代码,它们是等价的
let action = Selector(imgPressed())
let action = Selector(Void())
let action = Selector()
exept 一件事 - 在第一行中,您调用了 imgPressed()
函数,返回了 Void
,由您亲手执行。就是这样 =)
如果 swift 2.0 或更少
,请按照以下方式更改您的手势线
let gest=UITapGestureRecognizer(target: self, action: Selector("imgPressed"));
如果您使用 swift 2.2 或更高版本
let gest=UITapGestureRecognizer(target: self, action: #selector(imgPressed));
希望对您有所帮助。
我正在尝试将 UITapGestureRecognizer
添加到 imageview
,如下所示
let gest=UITapGestureRecognizer(target: self, action: Selector(imgPressed()));
gest.delegate=self
thalaImg.addGestureRecognizer(gest)
这里是 imgPressed
函数:
func imgPressed()
{
let alert=UIAlertController(title: "Img", message: "img pressed", preferredStyle: .Alert)
let okButton=UIAlertAction(title: "Ok", style: .Default, handler: nil)
alert.addAction(okButton)
presentViewController(alert, animated: true, completion: nil)
}
我在 viewdidload
中添加了 3 行代码,添加了一个断点和 运行 我观察到 application.What 一旦编译器到达第一行,即让 gest。 ..,它甚至在应用程序启动之前立即调用操作方法 running.Since 显然 window
尚未加载,它会抛出以下警告
Warning: Attempt to present on whose view is not in the window hierarchy!
我不明白为什么会这样。有人可以帮我解决这个问题吗?
谢谢
您应该使用以下语法:
let gest = UITapGestureRecognizer(target: self, action: #selector(imgPressed))
请注意,Selector
可以接受初始类型 Void
以及 String
。正确的旧式 Selector
初始化如下所示:
let action: Selector = Selector("imgPressed")
现在您可以检查一下,如果您尝试将新样式与旧样式结合使用,您将得到编译错误:
let action = Selector(imgPressed) // Error!
有趣的是,您可能会尝试通过附加括号来解决此错误,之后您将不会再有任何错误!但这完全没有用。看下面3行代码,它们是等价的
let action = Selector(imgPressed())
let action = Selector(Void())
let action = Selector()
exept 一件事 - 在第一行中,您调用了 imgPressed()
函数,返回了 Void
,由您亲手执行。就是这样 =)
如果 swift 2.0 或更少
,请按照以下方式更改您的手势线let gest=UITapGestureRecognizer(target: self, action: Selector("imgPressed"));
如果您使用 swift 2.2 或更高版本
let gest=UITapGestureRecognizer(target: self, action: #selector(imgPressed));
希望对您有所帮助。