drawRect لا يسمى مخصص UIButton فرعية عندما سلط الضوء

StackOverflow https://stackoverflow.com/questions/823524

  •  05-07-2019
  •  | 
  •  

سؤال

عند استخدام drawRect لمخصص UIButton فرعية، فإنه لا يبدو أن الحصول على استدعاء لرسم الزر عند تسليط الضوء عليها. هل أنا بحاجة إلى استدعاء setNeedsDisplay لزر بلدي في أحداث اتصال بي؟

هل كانت مفيدة؟

المحلول

وبقدر ما استطيع ان اقول ليس هناك طريقة مباشرة إلى الأمام إلى فئة فرعية UIButton.

وUIButton ليس نوع الدرجة الفعلية التي يتم إرجاعها من قبل المهيآت. UIButton هو نوع من واجهة لسلسلة من الدروس الخصوصية.

ويقول كان لديك:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
NSLog(@"myButton type: %@", [myButton description]);

وستجد نوع عاد في السجل ليكون "UIRoundedRectButton". المشكلة مع ذلك هو أنك سوف تحتاج إلى قمنا بمد "UIRoundedRectButton". لم يكن ذلك ممكنا كما هي فئة خاصة التي يتم إرجاعها فقط من أي وقت مضى إلى UIButton.

وعلاوة على ذلك "UIRoundedRectButton" ليست ممكنة الطبقة الوحيدة عاد كل منها القطاع الخاص.

في بعبارة أخرى بنيت UIButton بطريقة غير مناسبة لتمديدها.

نصائح أخرى

ولقد وجدت حلا سهلا.

وأضيف الطريقة التالية لفئة فرعية UIButton الخاص بك:

-(void)setHighlighted:(BOOL)highlighted
{
    [super setHighlighted:highlighted];
    [self setNeedsDisplay];
}

وهذا كل شيء!

وكان لي نفس المشكلة والنجاح مرضية مع التالية إضافة إلى بلدي فرعية UIButton

- (void)awakeFromNib {
    [self addTarget:self action:@selector(redraw) forControlEvents:UIControlEventAllEvents];
}

- (void)redraw {
    [self setNeedsDisplay];
    [self performSelector:@selector(setNeedsDisplay) withObject:self afterDelay:0.15];
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top