2016-04-20 3 views
-1

Ich habe eine benutzerdefinierte UILabel-Klasse erstellt und die Standardhintergrundfarbe festgelegt. Hier sind .h und .m Dateien meiner benutzerdefinierten Klasse.Objective c/iOS: So überschreiben Sie die LayoutSubviews der benutzerdefinierten Klasse in viewController

#import <UIKit/UIKit.h> 

@interface imLabel : UILabel 

@end 

UND

#import "imLabel.h" 

@implementation imLabel 

- (void)drawRect:(CGRect)rect { 
} 

- (void) layoutSubviews { 

self.backgroundColor = [UIColor redColor]; 

} 

@end 

Es funktioniert gut, aber hier ist das, was ich brauche: Ich möchte diese Arbeit nur, wenn der Backgroundcolor nicht in Viewcontroller festgelegt ist.

Hier ist meine viewDidLoad

- (void)viewDidLoad { 
    [super viewDidLoad]; 

label = [[imLabel alloc] initWithFrame:CGRectMake(50, 50, 300, 300)]; 
label.backgroundColor = [UIColor blueColor]; 

[self.view addSubview:label]; 
} 
+0

von imLabel eine 'Category' Klasse erstellen und rufen Sie die Methode – byJeevan

+0

Ich bin Neu bei iOS. Kannst du mir bitte sagen, welche Methode ich in der Kategorie Klasse aufrufen soll? –

Antwort

0

Sie steuern, ob background der Set-Label oder nicht in Viewcontroller, so dass der beste Weg, um Ihre Notwendigkeit, die ich überprüfen, denken zu erfüllen, ist das Etikett background gesetzt hatte oder nicht, wenn nicht, dann Stell es ein.

/* Somewhere in your ViewController */ 
if (!self.label.backgroundColor) { 
    self.label.backgroundColor = [UIColor redColor]; 
} 
+0

Ich brauche das umgekehrt. Ich möchte die Standard-Hintergrundfarbe überschreiben, die in meiner benutzerdefinierten Klasse in meinem ViewController festgelegt ist. –

+0

Ich habe meine Frage mit meinem viewDidLoad-Code aktualisiert, um meine Frage klarer zu machen. –

+0

Überschreiben Sie die Standardhintergrundfarbe, die in Ihrer benutzerdefinierten Klasse in ViewController festgelegt ist? Warum setzen Sie es nicht direkt in Ihrem ViewController auf Ihre Zielfarbe? Dann müssen Sie überhaupt nicht überschreiben. –

0

löschen alle anderen Code in imLabel.m, dann: -

(instancetype)initWithFrame:(CGRect)aRect { self = [super initWithFrame:aRect]; if (self) { self.backgroundColor = [UIColor redColor]; } return self;} 

Dank @Meiliang Dong

Verwandte Themen