UIButton: Ustaw obraz dla stanu zaznaczonego-podświetlonego

Ustawiam obrazek dla przycisku stan normalny, podświetlony i zaznaczony, ale gdy przycisk w stanie zaznaczonym i nacisnę/podświetl go, nie widziałem mojego podświetlonego obrazu, ale tylko szare zdjęcie. Czy można ustawić obrazek dla stanu podświetlonego po wybraniu przycisku?

Mój kod:

[button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected];

Kiedy robię:

[button setSelected:YES];

I naciśnij przycisk, " wciśnięty.obraz png " nie jest zaznaczony.

Author: user478681, 2011-04-08

15 answers

Znalazłem rozwiązanie: trzeba dodać linię dodawania

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
 231
Author: user478681,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-18 20:41:51

Możesz to zrobić w Interface Builder.

Wybierz UIButton, które chcesz ustawić w IB, a następnie przejdź do attributes inspector.

W zrzutach ekranu, używam niestandardowego typu przycisku, ale to nie ma znaczenia .

Niestandardowe Domyślne

Tutaj wpisz opis obrazka

Tutaj wpisz opis obrazka

 122
Author: Ríomhaire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-30 16:12:11

Swift 3

// Default state (previously `.Normal`)
button.setImage(UIImage(named: "image1"), for: [])

// Highlighted
button.setImage(UIImage(named: "image2"), for: .highlighted)

// Selected
button.setImage(UIImage(named: "image3"), for: .selected)

// Selected + Highlighted
button.setImage(UIImage(named: "image4"), for: [.selected, .highlighted])

Aby ustawić obraz tła możemy użyć setBackgroundImage(_:for:)

Swift 2.x

// Normal
button.setImage(UIImage(named: "image1"), forState: .Normal)

// Highlighted
button.setImage(UIImage(named: "image2"), forState: .Highlighted)

// Selected
button.setImage(UIImage(named: "image3"), forState: .Selected)

// Selected + Highlighted
button.setImage(UIImage(named: "image4"), forState: [.Selected, .Highlighted])
 31
Author: kvothe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-19 11:41:28

Myślę, że większość plakatów tutaj zupełnie nie ma sensu. Miałem ten sam problem. Pierwotne pytanie dotyczyło stanu podświetlenia wybranego przycisku (łączącego oba stany), który nie może być ustawiony w IB i wraca do stanu domyślnego z pewnym zaciemnieniem. Tylko działające rozwiązanie jako jeden post wymieniony:

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
 28
Author: alghanor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-08 07:55:18

Jeśli masz dobry powód, aby to zrobić, to załatwi sprawę

Dodaj te cele:

[button addTarget:self action:@selector(buttonTouchDown:) forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(buttonTouchUp:) forControlEvents:UIControlEventTouchUpInside];


-(void)buttonTouchDown:(id)sender{
    UIButton *button=(UIButton *)sender;
    if(button.selected){
        [button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateNormal];
    }
}

-(void)buttonTouchUp:(id)sender{
    UIButton *button=(UIButton *)sender;
    [button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
}
 12
Author: Jorge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-08 09:07:25

W Swift 3.x, można ustawić podświetlony obraz Po wybraniu przycisku w następujący sposób:

// Normal state
button.setImage(UIImage(named: "normalImage"), for: .normal) 

// Highlighted state (before button is selected)
button.setImage(UIImage(named: "pressedImage"), for: .highlighted)

// Selected state
button.setImage(UIImage(named: "selectedImage"), for:  .selected)

// Highlighted state (after button is selected)
button.setImage(UIImage(named: "pressedAfterBeingSelectedImage"), 
                for:  UIControlState.selected.union(.highlighted))
 7
Author: Ashish Verma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-28 21:40:06

W swift możesz zrobić:

button.setImage(UIImage(named: "selected"), 
                forState: UIControlState.selected.union(.highlighted))
 7
Author: Roland Keesom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-28 21:40:37

Popraw mnie, jeśli się mylę. Robiąc

   [button setSelected:YES];

Wyraźnie zmieniasz stan zaznaczonych przycisków. Więc oczywiście przez kod, który podałeś obraz będzie dla wybranego stanu w Twoim przypadku zaznaczony.png

 2
Author: visakh7,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-08 09:03:06

Jeśli ktoś się zastanawia jak to działa w Swifcie, oto moje rozwiązanie:

button.setImage("normal.png", forState: .Normal)
button.setImage("highlighted.png", forState: .Highlighted)
button.setImage("selected.png", forState: .Selected)

var selectedHighLightedStates: UIControlState = UIControlState.Highlighted
selectedHighLightedStates = selectedHighLightedStates.union(UIControlState.Selected)
button.setImage("selectedHighlighted.png", forState: selectedHighLightedStates)
 1
Author: basedgod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-24 12:24:12

Swift 3 +

button.setImage(UIImage(named: "selected_image"), for: [.selected, .highlighted])

Lub

button.setImage(UIImage(named: "selected_image"), for: UIControlState.selected.union(.highlighted))

Oznacza to, że przycisk obecny w stanie selected, następnie go dotykasz, pokazujesz stan highlight.

 1
Author: yuanjilee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-08 03:54:14

Miałem problem z ustawieniem imageView.highlighted = NO; (ustawienie tak działało poprawnie i obraz zmienił się na podświetlony).

The solution was calling [imageView setHighlighted:NO];

Wszystko działało prawidłowo.
 0
Author: DrArt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-06 12:12:45

Skąd chcesz zadzwonić

[button addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];

Metoda:

-(void)test:(id)sender{
    UIButton *button=(UIButton *)sender;
    if (_togon){
      [button setTitleColor:UIColorFromRGB(89,89, 89) forState:UIControlStateNormal];
      _togon=NO;
    }
    else{
      [button setTitleColor:UIColorFromRGB(28, 154, 214) forState:UIControlStateNormal];
      _togon=YES;
    }
}

Kredyt powyżej dla Jorge ale poprawiłem go trochę dając pełne rozwiązanie pracy

 0
Author: Kingsley Mitchell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-02 09:49:43

Xamarin C #

Robi bit lub nie działa z jakiegoś powodu

button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected | UIControlState.Highlighted | UIControlState.Focused);

Następujące prace

button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Highlighted);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Focused);
 0
Author: Pierre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-19 10:59:36

Jeśli potrzebujesz podświetlonego odcienia, który system operacyjny domyślnie zapewnia po dotknięciu i przytrzymaniu niestandardowego przycisku dla wybranego stanu, użyj tej podklasy UIButton. Napisane w Swift 5:

import Foundation
import UIKit
class HighlightOnSelectCustomButton: UIButton {
    override var isHighlighted: Bool {
        didSet {
            if (self.isSelected != isHighlighted) {
                self.isHighlighted = self.isSelected
            }
        }
    }
}
 0
Author: Raj Pawan Gumdal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-18 06:54:39

W moim przypadku, muszę zmienić UIButton.Wpisz od .custom do .system

I:

button.setImage(UIImage(named: "unchecked"), for: .normal)
button.setImage(UIImage(named: "checked"), for: [.selected, .highlighted])

Podczas obsługi stukania:

button.isSelected = !button.isSelected

 0
Author: Tai Le,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-06 09:18:26