2012-01-11 11 views
5

Potrzebuję UIButtonu, aby utrzymać wciśnięty stan. Zasadniczo, jeśli przycisk jest w normalnym stanie, chcę dotknąć przycisku, podświetli się jego standardowy niebieski kolor, a następnie pozostanie niebieski po podniesieniu palca. Wykonałem następującą operację UIAction i podłączyłem do niej przyciski Touch Up Inside.Nie można zachować UIButton w wybranym stanie po zdarzeniu TouchUpInside

-(IBAction) emergencyButtonPress:(id) sender 
{ 
    if(emergencyButton.highlighted) 
    { 
     emergencyButton.selected = NO; 
     emergencyButton.highlighted = NO; 
    } 
    else 
    { 
     emergencyButton.selected = YES; 
     emergencyButton.highlighted = YES; 
    } 
} 

Ale co się stanie, po zdjęciu palca przycisk powraca na białym tle. Dla testu dodałem UISwitch i mieć go wykonać ten sam kod:

-(IBAction) emergencySwitchClick:(id) sender 
{ 
    if(emergencyButton.highlighted) 
    { 
     emergencyButton.selected = NO; 
     emergencyButton.highlighted = NO; 
    } 
    else 
    { 
     emergencyButton.selected = YES; 
     emergencyButton.highlighted = YES; 
    } 
} 

W tym przypadku przycisk przełącza do podświetlone i nie podświetlonego stanie, jak bym się spodziewał.

Czy po zdarzeniu Touch Up Inside nastąpiło kolejne zdarzenie, które przywraca stan "normalny"? Jak utrzymać zaznaczony stan?

Odpowiedz

1

Jeśli chcesz, aby powyższy kod zadziałał, powinieneś ustawić obraz dla wybranego stanu i jednego (nawet tego samego) dla podświetlonego stanu.

[emergencyButton setBackgroundImage:buttonHighlightImage forState:UIControlStateHighlighted]; 
[emergencyButton setBackgroundImage:buttonHighlightImage forState:UIControlStateSelected]; 

nadzieję, że to pomaga.

+0

Dzięki za odpowiedź. Dodałem te linie do mojej funkcji viewdidload: function. Teraz, kiedy naciskam i przytrzymuję przycisk, widzę obraz, ale kiedy puściłem przycisk, wraca do białego. – WolfpackEE

2

Jeśli chcesz coś jak przycisk przełączania, dostosować swój „wybrany” stan do swojego „wciśnięty” stan, a następnie napisać coś takiego:

- (IBAction)buttonTapped:(id)sender { 
    [(UIButton*)sender setSelected:![sender isSelected]]; 
} 
0

nie jest to możliwe, niestety, jak najszybciej puścisz Apple ponownie zmienia stan. Jedną z opcji, którą wcześniej użyłem (ale nie ładną) jest to, że używasz performSelector z opóźnieniem 0.1 po naciśnięciu przycisku, aby umieścić go ponownie w wybranym stanie. To zadziałało w moim przypadku.

EDIT: Jeśli nie chcesz, aby zobaczyć efekt migania, po prostu ustawić opóźnienie 0.0

+0

Wow, to działa. Błyskawicznie miga przycisk od niebieskiego do białego do niebieskiego. Będę musiał sprawdzić, czy jest to do przyjęcia dla użytkownika końcowego. Dzięki za wskazówkę. – WolfpackEE

+0

nie ma problemu, jeśli to działa dla Ciebie, czy możesz oznaczyć to jako poprawną odpowiedź? Zawsze jest ładniej, jeśli wszystkie posty mają odpowiedzi oznaczone :) –

6

Podświetlony stan jest stosowane i usuwane przez iOS po dotknięciu/zwolnij przycisk. Więc nie polegaj na nim w swojej metodzie akcji.

Jako jeden z pozostałych odpowiedzi mówi, ustawić podświetlony obraz będzie taki sam, jak wybrany obraz, a następnie zmodyfikować metodę Działanie:

-(IBAction) emergencyButtonPress:(id) sender 
{ 
    emergencyButton.selected = !emergencyButton.selected;  
} 
1

miałem ten sam problem, i to działało dla mnie:

-(IBAction)buttonPressed:(id)sender { 
if (isSelected) { 
    [_button setSelected:NO]; 
    [_button setImage:[UIImage imageNamed:@"not_selected.png"] forState:UIControlStateSelected]; 
    isSelected=NO; 

} 
else { 
    [_button setSelected:YES]; 
    [_button setImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateSelected]; 
    isSelected=YES; 
} 
} 
0

Ten pracował dla mnie:

- (void)tapButton:(id)sender{ 
    UIButton *button = sender; 
    if (!button.selected){ 
     [self performSelector:@selector(highlight:) withObject:button afterDelay:0.0]; 
    }else{ 
     [self performSelector:@selector(removeHighlight:) withObject:button afterDelay:0.0]; 
    } 
} 

- (void)highlight:(UIButton *)button{ 
    button.selected = !button.selected; 
    button.highlighted = YES; 
} 

- (void)removeHighlight:(UIButton *)button{ 
    button.selected = !button.selected; 
    button.highlighted = NO; 
} 
0

Spróbuj prostą odpowiedź ....

- (void)mybutton:(id)sender 
{ 
    UIButton *button = (UIButton *)sender; 
    button.selected = ![button isSelected]; // Important line 
    if (button.selected) 
    { 
     NSLog(@"Selected"); 
     NSLog(@"%i",button.tag); 
    } 
    else 
    { 
     NSLog(@"Un Selected"); 
     NSLog(@"%i",button.tag); 

    } 
} 
+0

Czy możesz wyjaśnić, że przycisk 'button.selected =! [Button isSelected]; 'dlaczego to ważne i co robi? – jckly

Powiązane problemy