2016-04-09 22 views
0

UIButton'u özelleştirmek ve sınıf darbesini yazmak istiyorum. Arayüz oluşturucu olarakAmaç C, özelleştirme UIButton, hata NSGenericException

hata olsun UIButton özel sınıf olarak bu sınıfı kullanmak ancak

Terminating app due to uncaught exception 'NSGenericException', reason: 'This coder requires that replaced objects be returned from initWithCoder:' 

özel sınıfı:

-(id) initWithCoder:(NSCoder *)aDecoder { 
if((self = [super init])){ 
    self.layer.cornerRadius = 4.0; 
    self.clipsToBounds = true; 
    self.backgroundColor = [UIColor colorWithRed:69/255 green:83/255 blue:153/255 alpha:1]; 
} 
return nil; 
} 

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

    if(highlighted){ 
     self.backgroundColor = [UIColor colorWithRed:83/255 green:98/255 blue:178/255 alpha:1]; 
    } else { 
     self.backgroundColor = [UIColor colorWithRed:69/255 green:83/255 blue:153/255 alpha:1]; 
    } 
} 

cevap

0

-(id) initWithCoder:(NSCoder *)aDecoder { 
if((self = [super init])){ 
self.layer.cornerRadius = 4.0; 
self.clipsToBounds = true; 
self.backgroundColor = [UIColor colorWithRed:69/255 green:83/255 blue:153/255 alpha:1]; 
} 
return nil; 
}  

Son çizgi

return self; 
0

Bunu hatayı özellikle almanızın nedeni emin değilim ama biliyorum ki bu özel sınıfla yapmaya çalıştığınız her şey doğrudan Arayüz Oluşturucu'nun kendisinde yapılabilir. Bu durumda UIButton özel bir alt sınıfı oluşturmak için iyi bir nedeniniz yoksa, bunu yapmak için IB'yi kullanmanızı öneririz.

IB ayarlamak için biraz daha yanıltıcıdır bir nitelik bunun için bir grafik ayarı olmadığı için layer.cornerRadius, ancak Identity Inspector ait User Defined Runtime Attributes bölümünü kullanarak ayarlanabilir. , Number, Number, Type ve 4 (sizin durumunuzda) olarak layer.cornerRadius ile yeni bir satır ekleyin Value. yöntemde

+0

Ben hata initWithCoder yönteminde döndürme hatası olduğunu buluyorum. dönüş kendini çözüm olacak. Düğme vurgulama durumunu özelleştirmek isterseniz, UIButton sınıfını –

+0

özelleştirmelisiniz. Ancak, bildiğiniz gibi, UIButton'un (Vurgulanan, Odaklanmış, Seçili, Devre Dışı) tüm yerleşik durumlarını Arayüz Oluşturucu aracılığıyla özelleştirebilirsiniz. Bunu yapmak için bir alt sınıf yapmanız gerekmez. Öznitelik Denetçisi altında bir 'Durum Yapılandırması 'seçeneği vardır. Bunu "Vurgulanan" olarak ayarlarsanız, o durum için kullanılacak öznitelikleri ayarlayabilirsiniz. Bütün eyaletleri bu şekilde ayarlayabilirsiniz. Ardından, seçilecek, vurgulanmış, devre dışı bırakılmış vb. Düğmeyi ayarladığınızda, özel yapılandırmanızı kullanır. Umarım hayatınızı biraz kolaylaştırır! – othomas

+0

tamam, teşekkürler! –

0
-(id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super init]; 
    if(self) 
    { 
     self.layer.cornerRadius = 4.0; 
     self.clipsToBounds = true; 
     self.backgroundColor = [UIColor colorWithRed:69/255 green:83/255 blue:153/255 alpha:1]; 
    } 
    return self; 
}  

bu deneyin olmalıdır.