2011-11-03 11 views
6

mam dostosowywania UIButton programowo tutaj:Co to jest właściwe UIControlState dla naciśnięcia przycisku UIBUT?

button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [button setSelected:YES]; 
     button.frame = CGRectMake(x, y, width, height); 
     [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
     [button setTitleColor:[UIColor blueColor] forState:UIControlStateSelected]; 
     [button setTitle:@"Button Title" forState:UIControlStateNormal]; 
     [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside]; 
     [button setBackgroundImage:[UIImage imageNamed:@"button.png"] forState:UIControlStateNormal]; 
     [button setBackgroundImage:[UIImage imageNamed:@"buttonActive.png"] forState:UIControlStateSelected]; 
     [button setBackgroundImage:[UIImage imageNamed:@"buttonActive.png"] forState:UIControlStateHighlighted]; 
     [button setBackgroundImage:[UIImage imageNamed:@"buttonActive.png"] forState:UIControlStateDisabled]; 

problem jest jeśli mam przytrzymując zdjęciu tło zniknie dopóki jestem zwalniając go ...

Odpowiedz

8

myślę, że jesteś w trybie overkill :). Spróbuj ustawić przycisk.png dla UIControlStateNormal i buttonActive.png dla UIControlStateHighlighted. Nie ma potrzeby odpoczynku. Sprawdź, czy to działa.

EDIT:

również pamiętać: nazwy plików Obraz jest wielkość liter

Czy badania na urządzeniu? W nazwach obrazów rozróżniana jest wielkość liter dla wersji urządzeń, ale nie dla symulatora. Na przykład, jeśli rzeczywisty plik obrazu ma nazwę buttonactive.png, ale wywołujesz go jako buttonActive.png ze swojego kodu, pojawi się on na symulatorze, ale nie na urządzeniu.

Upewnij się, że wielkość liter w przypadku obu nazw obrazów jest zgodna z nazwą rzeczywistego pliku.

EDIT # 2:

Spróbuj kod

button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [button setSelected:YES]; 
    button.frame = CGRectMake(x, y, width, height); 
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
    [button setTitleColor:[UIColor blueColor] forState:UIControlStateSelected]; 
    [button setTitle:@"Button Title" forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside]; 
    [button setBackgroundImage:[UIImage imageNamed:@"button.png"] forState:UIControlStateNormal]; 
    [button setBackgroundImage:[UIImage imageNamed:@"buttonActive.png"] forState:UIControlStateHighlighted]; 
+1

dodam, że nazwy plików graficznych jest wielkość liter na zasadzie Urządzenie, ale NIE w symulatorze. To sprawiło, że kilka razy podrapałem się w głowę :) – Keller

+0

@Sid: Wiem, że w ** nazwach obrazów jest rozróżniana wielkość liter **. Testuję na symulatorze iPhone'a, ale powinienem reagować tak samo ... –

+0

@Keller: :) ... – Sid

3

zrozumieć to, że działa w ten sposób:

[_whateverButtonTab setBackgroundImage:[UIImage imageNamed:@"ActivateButton.png"] forState:UIControlStateSelected]; 
[_whateverButtonTab setBackgroundImage:[UIImage imageNamed:@"ActivateButton.png"] forState:(UIControlStateHighlighted|UIControlStateSelected)]; 
-2

Gdy dodamy przycisk z IDE

próbka:

.h file 
-(IBAction)BtnAdd:(id)sender 

w .m pliku to

-(IBAction)BtnAdd:(id)sender 
{ 
} 

Jest to metoda, która nie może włączyć lub wyłączyć.

więc jeśli chcesz włączyć lub wyłączyć przycisk uczynić go jako -(IBOutlet)BtnAdd dodać IBOutlet do .h plik i podłączyć go do konkretnego przycisku następnie BtnAdd.enabled=NO zadziała