UIButton'u alt sınıflandırabilir ve forState için hoş bir şey yapabilirsiniz.
colourButton.h
#import <UIKit/UIKit.h>
@interface colourButton : UIButton
-(void)setBackgroundColor:(UIColor *)backgroundColor forState:(UIControlState)state;
@end
colourButton.m
#import "colourButton.h"
@implementation colourButton
{
NSMutableDictionary *colours;
}
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
// If colours does not exist
if(!colours)
{
colours = [NSMutableDictionary new]; // The dictionary is used to store the colour, the key is a text version of the ENUM
colours[[NSString stringWithFormat:@"%lu", UIControlStateNormal]] = (UIColor*)self.backgroundColor; // Store the original background colour
}
return self;
}
-(void)setBackgroundColor:(UIColor *)backgroundColor forState:(UIControlState)state
{
// If it is normal then set the standard background here
if(state & UIControlStateNormal)
{
[super setBackgroundColor:backgroundColor];
}
// Store the background colour for that state
colours[[NSString stringWithFormat:@"%lu", state]]= backgroundColor;
}
-(void)setHighlighted:(BOOL)highlighted
{
// Do original Highlight
[super setHighlighted:highlighted];
// Highlight with new colour OR replace with orignial
if (highlighted && colours[[NSString stringWithFormat:@"%lu", UIControlStateHighlighted]])
{
self.backgroundColor = colours[[NSString stringWithFormat:@"%lu", UIControlStateHighlighted]];
}
else
{
self.backgroundColor = colours[[NSString stringWithFormat:@"%lu", UIControlStateNormal]];
}
}
-(void)setSelected:(BOOL)selected
{
// Do original Selected
[super setSelected:selected];
// Select with new colour OR replace with orignial
if (selected && colours[[NSString stringWithFormat:@"%lu", UIControlStateSelected]])
{
self.backgroundColor = colours[[NSString stringWithFormat:@"%lu", UIControlStateSelected]];
}
else
{
self.backgroundColor = colours[[NSString stringWithFormat:@"%lu", UIControlStateNormal]];
}
}
@end
Notlar (Bu bir örnek, sorunların olduğunu biliyorum ve işte bazıları)
Her Eyalet için UIColor saklamak için bir NSMutableDictionay kullandım, UIControlState hoş bir düz Int değil gibi Anahtar için kötü bir metin dönüştürme yapmak zorunda. Eğer bu kadar çok nesne ile bir Array başlatabilir ve Devlet dizin olarak kullanabilirsiniz.
Bu nedenle, birçoğunuz seçili ve devre dışı bırakılmış bir düğme ile zorluklarınız var, biraz daha mantık gerekiyor.
Başka bir sorun, aynı anda birden fazla renk denemeniz ve ayarlamanız durumunda, bir düğme ile denemedim, ancak bunu yapabilirseniz işe yaramayabilir.
[btn setBackgroundColor:colour forState:UIControlStateSelected & UIControlStateHighlighted];
Bunun StoryBoard olduğunu varsaydım, init, initWithFrame yok, bu yüzden onlara ihtiyacınız varsa ekleyin.