lijo050
lijo050

Reputation: 233

Getting unrecognized selector sent to class while trying to call selector as a parameter to a method

I'm trying to put my current working code present in view controller to a helper class. But getting "unrecognized selector sent to class" error.

Previous View Controller:

UIImage *buttonImg = [[UIImage imageNamed:@"img-settings"]imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
UIButton *buttonSetting = [UIButton buttonWithType:UIButtonTypeCustom];
[buttonSetting setTintColor:[ColorHelper hiltiDirtyPurple]];
[buttonSetting setImage:buttonImg forState:UIControlStateNormal];
[buttonSetting setFrame:CGRectMake(20, 15, 24, 24)];
[buttonSetting addTarget:self action:@selector(settingPage) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *settingbarItem = [[UIBarButtonItem alloc] initWithCustomView:buttonSetting];

- (void) settingPage
{
    [self performSegueWithIdentifier:@"settingPage" sender:nil];
}

Modified View Controller:

#import "IconsHelper.h"

UIBarButtonItem *settingbarItem = [IconsHelper setSettingButtonForSelector:@selector(settingPage) target:[ListVC self]];

In IconsHelper.m

+(UIBarButtonItem *)setSettingButtonForSelector:(SEL)selector target:(Class) classObject{
UIImage *buttonImg = [[UIImage imageNamed:@"img-settings"]imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
UIButton *buttonSetting = [UIButton buttonWithType:UIButtonTypeCustom];
[buttonSetting setTintColor:[ColorHelper hiltiDirtyPurple]];
[buttonSetting setImage:buttonImg forState:UIControlStateNormal];
[buttonSetting setFrame:CGRectMake(20, 15, 24, 24)];
[buttonSetting addTarget:classObject action:selector forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *settingbarItem = [[UIBarButtonItem alloc] initWithCustomView:buttonSetting];
return settingbarItem;

}

Upvotes: 1

Views: 251

Answers (2)

Nirav Zalavadia
Nirav Zalavadia

Reputation: 74

I think you should try these

- (void)settingPage
{
    [self performSegueWithIdentifier:@"settingPage" sender:self];
}

issue might be occur through you have written

- (void) settingPage // here you have single space before method name your should write method like

- (void)settingPage
{

}

Hopefully you resolved your issue. Thanks Nirav Zalavadia

Upvotes: 0

iCoderz Developers
iCoderz Developers

Reputation: 308

Please try this update method in IconsHelper Class

Updated:

    +(UIBarButtonItem *)setSettingButtonForSelector:(SEL)selector target:(UIViewController *)viewController{
    UIImage *buttonImg = [[UIImage imageNamed:@"img-settings"]imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
    UIButton *buttonSetting = [UIButton buttonWithType:UIButtonTypeCustom];
    [buttonSetting setTintColor:[ColorHelper hiltiDirtyPurple]];
    [buttonSetting setImage:buttonImg forState:UIControlStateNormal];
    [buttonSetting setFrame:CGRectMake(20, 15, 24, 24)];
    [buttonSetting addTarget:viewController action:selector forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *settingbarItem = [[UIBarButtonItem alloc] initWithCustomView:buttonSetting];
    return settingbarItem;


    Rather than providing "Class" object, try updating parameter type to "UIViewController".

Also, try calling this method with following:

 UIBarButtonItem *settingbarItem = [IconsHelper setSettingButtonForSelector:@selector(settingPage) target:self];

Let me know it is working.

Upvotes: 2

Related Questions