Jesus
Jesus

Reputation: 8586

How to know UIBarButtonItem selector's name

I'm developing an SplitView based app for iOS

where I added a button on my master viewcontroller for hidding this view, I did it like this

MasterViewController.m

- (IBAction)hideMasterViewController:(id)sender {
    
    
    if (!app) { app = (AppDelegate *)[[UIApplication sharedApplication] delegate]; }
    if (!currentSplitViewController) {
        currentSplitViewController  = (UISplitViewController *) app.window.rootViewController;
    }
    
    navController        = [currentSplitViewController.viewControllers lastObject];
    
    UIBarButtonItem *button = [[[[navController childViewControllers] objectAtIndex:0] navigationItem ] leftBarButtonItem];
    
    [button.target performSelector:button.action];
    
}

as you can see I added the functionallyty of my Detail View Controller's leftBarButtonItem on my own button and then I ordered to perform it's own selector here

[button.target performSelector:button.action];

but now I get this warning :

PerformSelector may cause a leak because its selector is unknown

I did that way since Detail Controller has it prebuilt and I don't know it's selector's name, how to know that???


EDIT: these are my two screens:

DetailViewController (original pre-built button) enter image description here

MasterViewController (where I developed my button clone from pre-built button in detail view) enter image description here


EDIT: thanks to Jesus gonna put my answer:

- (IBAction)hideMasterViewController:(id)sender {
    
    
    if (!app) { app = (AppDelegate *)[[UIApplication sharedApplication] delegate]; }
    if (!currentSplitViewController) {
        currentSplitViewController  = (UISplitViewController *) app.window.rootViewController;
    }
    
    navController        = [currentSplitViewController.viewControllers lastObject];
    
    UIBarButtonItem *button = [[[[navController childViewControllers] objectAtIndex:0] navigationItem ] leftBarButtonItem];
    
    
    [button.target performSelector:@selector(toggleMasterVisible:)];
}

-(IBAction)toggleMasterVisible:(id)sender{
    
}
  1. I could get selector's name with NSStringFromSelector(button.action)
  2. after changing performSelector with selector's name I had another warning because toggleMasterVisible: was not declared (locally), so I turned it off by adding that IBAction but I did never set to my button

Upvotes: 1

Views: 195

Answers (1)

Jesús Ayala
Jesús Ayala

Reputation: 2791

Use this:

NSStringFromSelector(button.action)

Upvotes: 1

Related Questions