ios - performSelector in category of superclass fails when calling method available in specific subclass -
i have uiview category defines methods manipulate attributedtext
property of uilabel , uitextview.
@implementation uiview (replaceattrtext) -(void) replaceattrtext: (nsstring *)str { if ([self respondstoselector: @selector(setattributedtext)]) { nsmutableattributedstring *labeltext = [self template]; // change [self performselector:@selector(setattributedtext) withobject: labeltext]; } } @end
respondstoselector returns false both uilabel , uitextview (although respond setattributedtext) , if setattributedtext executed directly without respondstoselector
check exception raised.
when category implemented directly on uilabel (without selectors) works, unfortunately uilabel , uitextview don't have common ancestor has attributedtext property.
what doing wrong? thanks!
uilabel
, uitextview
not have method named setattributedtext
. have method named setattributedtext:
. note colon. colon part of method name. having or not represents 2 separate methods.
change code to:
-(void) replaceattrtext: (nsstring *)str { if ([self respondstoselector: @selector(setattributedtext:)]) { nsmutableattributedstring *labeltext = [self template]; // change [self performselector:@selector(setattributedtext:) withobject: labeltext]; } }
in other words, add colon both references setattributedtext
.
Comments
Post a Comment