2014-07-19 10 views
7

Chciałbym, aby mój przycisk był podświetlony po tym, jak użytkownik go dotknie. Jeśli użytkownik ponownie dotknie przycisku, chciałbym, aby został usunięty/nie został podświetlony. Nie jestem pewien, jak to zrobić w szybkim tempie. Obecnie ustawiam podświetlony przycisk i wybrany obraz do tego samego pliku .png przy użyciu kreatora interfejsu.Zachowaj UIButton Wybrany/Podświetlony po dotknięciu

Po uruchomieniu aplikacji i dotknięciu przycisku zmienia się ona w mój podświetlany obraz tak długo, jak długo pozostaje palec na przycisku.

Odpowiedz

25

użycia poniżej kodu zadeklarować isHighLighted jako przykład zmiennej

//write this in your class 
var isHighLighted:Bool = false 


override func viewDidLoad() { 

    let button = UIButton(type: .system) 

    button.setTitle("Your title", forState: UIControlState.Normal) 
    button.frame = CGRectMake(0, 0, 100, 44) 

    self.view.addSubview(button as UIView) 

    button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside) 

} 

func buttonClicked(sender:UIButton) 
{ 
    dispatch_async(dispatch_get_main_queue(), { 

     if isHighLighted == false{ 
      sender.highlighted = true; 
      isHighLighted = true 
     }else{ 
      sender.highlighted = false; 
      isHighLighted = false 
     } 
    }); 
} 

Polecam użyć selected stanu zamiast highlighted poniżej kod demonstarate w stanie wybranym

override func viewDidLoad() { 

    let button = UIButton(type: .system) 

    button.setTitle("Your title", forState: UIControlState.Normal) 
    button.frame = CGRectMake(0, 0, 100, 44) 

    self.view.addSubview(button as UIView) 
    //set normal image 
    button.setImage(normalImage, forState: UIControlState.Normal) 
    //set highlighted image 
    button.setImage(selectedImage, forState: UIControlState.Selected) 

    button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside) 

} 

func buttonClicked(sender:UIButton) 
{ 
     sender.selected = !sender.selected; 
} 
+0

Nie widzę, gdzie w kodzie zadeklarowałeś "isHighLigthed". Widzę, gdzie sprawdzasz wartość "isHighLighted", ale nie tam, gdzie faktycznie deklarujesz to – dcbenji

+1

zadeklaruj to po 'class Abc {' line 'var isHighLighted: Bool = false'. To będzie działać idealnie – codester

+0

@ user3822654 you van również używaj wybranych stan, ponieważ jest bardziej używany do przełączania zachowań.Należy ustawić dwa obrazy jeden dla 'normalState' inny dla' selectedState' .Opierają się, że to pomaga – codester

3
func highlightButton(button: UIButton) { 
     button.highlighted = true 
} 

@IBAction func touched(sender: UIButton) { 
    let timer = NSTimer.scheduledTimerWithTimeInterval(0.0, target: self, selector: Selector("highlightButton(sender)"), userInfo: nil, repeats: true) 
} 
+0

Could dajesz przykład w Swift? – dcbenji

+0

Och, przepraszam, nie wiedziałem, że chcesz go w Swift – Bas

+0

zredagowałeś moje pytanie. – Bas

2
func buttonPressed(_ sender: UIButton) { 

    // "button" is a property 

    if button.isSelected { 
     button.setImage(UIImage(named: "filled-heart"), for: .normal) 
     button.isSelected = false 
    }else { 
     button.setImage(UIImage(named: "empty-heart"), for: .selected) 
     button.isSelected = true 
    } 
} 
Powiązane problemy