objective c - How to customising subclass implementation at runtime in iOS? -
mytextfield uitextfield subclass have margin in textfield.
@interface mytextfield : uitextfield @property (nonatomic, assign) bool enablemargin; - (instancetype) initwithmarginenable:(bool)enable; @end @implementation mytextfield - (cgrect)textrectforbounds:(cgrect)bounds { if(self.enablemargin) return; return cgrectinset(bounds, 32.5f, 0); } - (cgrect)editingrectforbounds:(cgrect)bounds { return [self textrectforbounds:bounds]; } - (instancetype) initwithmarginenable:(bool)enable { self = [super init]; if(self) { self.enablemargin = enable; } return self; } @end this working fine !
mytextfield *txt = [[mytextfield alloc] init]; but @ point in app, require not have margin, however, keep continuity , reason still have use mytextfield throughout app.
this doesn't !
mytextfield *txt = [[mytextfield alloc] initwithmarginenable:yes]; but in personal investigation realized textrectforbounds: method call before mytextfield's init.
how make (or check it) don't want margin or not? i've tried custom init method still calls textrectforbounds:.
and yes, app supports ios7 > advice/suggestion/answer should based on condition :)
you have call setneedsdisplay after setting enablemargin property. don't need make separate init, as:
@implementation mytextfield - (cgrect)textrectforbounds:(cgrect)bounds { if(self.enablemargin) return cgrectinset(bounds, 0, 0);; return cgrectinset(bounds, 32.5f, 0); } - (cgrect)editingrectforbounds:(cgrect)bounds { return [self textrectforbounds:bounds]; } -(void)setenablemargin:(bool)enablemargin { _enablemargin = enablemargin; [self setneedsdisplay]; } @end to use it, have call:
mytextfield *mytext = [[mytextfield alloc] init]; mytext.frame = // whatever frame mytext.enablemargin = yes;
Comments
Post a Comment