I am trying to add a UITapGestureRecognizer
to a imageview
as shown below
let gest=UITapGestureRecognizer(target: self, action: Selector(imgPressed()));
gest.delegate=self
thalaImg.addGestureRecognizer(gest)
And here is the imgPressed
function :
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)
}
I added the 3 lines of code in viewdidload
, added a breakpoint and ran the application.What i observed is that once the compiler comes to the first line ie let gest..., it is calling the action method immediately even before the application starts running.Since obviously the window
is yet to load, it throws the below warning
Warning: Attempt to present on whose view is not in the window hierarchy!
I don't understand why this is happening .Can someone please help me with this issue?
Thank you
You should use following syntax:
let gest = UITapGestureRecognizer(target: self, action: #selector(imgPressed))
Note, that Selector
can accept initial type Void
as well as String
. Properly old-style Selector
initialization looks like this:
let action: Selector = Selector("imgPressed")
Now you may check, that if you will try combine new style with old style you will get compilation error:
let action = Selector(imgPressed) // Error!
Funny thing is that you probably will try to resolve this error by appending bracers, and you will not have any errors after that! But this is completely useless. Look at following 3 lines of code, they are equivalent
let action = Selector(imgPressed())
let action = Selector(Void())
let action = Selector()
exept one thing - in first line you called imgPressed()
function, returned Void
, by your hands. Thats it =)
Change your gesture line like following if swift 2.0 or less
let gest=UITapGestureRecognizer(target: self, action: Selector("imgPressed"));
if you are using swift 2.2 or greater than that
let gest=UITapGestureRecognizer(target: self, action: #selector(imgPressed));
Hope this will help you.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.