objective-cios7uitapgesturerecognizerinstance-methods

how to call @selector method from another class


is it possible to call @selector methods from another class ? for example i make a method "bannerTapped:" and call it from "myViewController.m" class.

myviewcontroller.m :

anotherClass *ac= [[anotherClass alloc]init];

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]initWithTarget:ac action:@selector(bannerTapped:)];
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
cell.conversationImageView.tag = indexPath.row;
[cell.conversationImageView addGestureRecognizer:singleTap];
[cell.conversationImageView setUserInteractionEnabled:YES];

anotherClass.m :

-(void)bannerTapped:(UIGestureRecognizer *)gestureRecognizer {
    //do something here 
}

updated :

viewController.m:

 #import "anotherClass.h"



 +(viewcontroller *)myMethod{
 // some code...

 anotherClass *ac= [[anotherClass alloc]init];

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]initWithTarget:ac   action:@selector(bannerTapped:)];

}

anotherClass.h:

-(void)bannerTapped:(UIGestureRecognizer *)gestureRecognizer;

anotherClass.m:

-(void)Viewdidload{
    [viewController myMethod];
     }


   -(void)bannerTapped:(UIGestureRecognizer *)gestureRecognizer {
      //do something here 
   }

Solution

  • Yes, like this

    initWithTarget:anotherClassInstance action:@selector(bannerTapped:)];
    

    The Target is the class instance you want to send the event to.

    EDIT

    Please learn to post all of your code in future as you question is FAR more complex than you have asked. Long story short you can't do this:

    +(viewcontroller *)myMethod{
    
       anotherClass *ac= [[anotherClass alloc]init];
    
       UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]initWithTarget:ac   action:@selector(bannerTapped:)];
    
    }
    

    As soon as this method finishes, ac will be released form memory as the scope it was created in is now gone. Using ARC makes no difference here.

    You need to understand some different things here:

    My first piece of code answers the question you asked, that is how you call a selector from another class. Your issue now is that you don't understand the flow of objects, memory management, class instances and class methods vs instance methods.

    Please study objective-c and object oriented programming more and try this again.