2013-06-03 27 views
8

Tôi muốn UIButton của mình hiển thị trạng thái được đánh dấu khi tôi nhấp vào nút đã được chọn.Trạng thái được đánh dấu UIButton không hiển thị khi nhấp vào UIButton đã chọn

Về cơ bản ở trạng thái được tô sáng, tôi áp dụng hình ảnh * .png làm hình nền UIButton backgroundImage của tôi để tạo hiệu ứng nén.

Nhưng nếu nút đã ở trạng thái được chọn Khi tôi bấm lại nó, tôi không thể nhìn thấy trạng thái được đánh dấu nhưng nó sẽ chuyển thẳng đến trạng thái bình thường!

Watch Issue ->Video of the Issue!

Trợ giúp xin vui lòng

//0 init UIButton 
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(x, y, aSide, aSide)]; 

//1 Give it a backgroundColor 
[button setBackgroundColor:aColor]; 

[..] 

//2 Set titleLabel and its style 
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
[button setTitleColor:[UIColor redColor] forState:UIControlStateSelected]; 
[button setTitleColor:[UIColor grayColor] forState:UIControlStateHighlighted]; 

UIImage *shadowImage = [UIImage imageNamed:kBtnShadow]; 
shadowImage = [shadowImage stretchableImageWithLeftCapWidth:floorf(shadowImage.size.width/2) topCapHeight:floorf(shadowImage.size.height/2)]; 

[button setBackgroundImage:shadowImage forState: UIControlStateHighlighted]; 

[button setTitle:aLabel forState: UIControlStateNormal]; 

//3 Assign tag and Action 
[button setTag:tag]; 
[button addTarget:target action:a forControlEvents:UIControlEventTouchUpInside]; 

Trả lời

18

Các trạng thái khác nhau: UIControlStateNormal, UIControlStateSelected, và (UIControlStateSelected | UIControlStateHighlighted) đều thực sự rõ rệt. Nếu bạn muốn bạn shadowImage để áp dụng cả trong tình trạng (chỉ) nhấn mạnh và trong tình trạng + chọn đánh dấu, bạn cũng phải thiết lập:

[button setBackgroundImage:shadowImage forState:(UIControlStateHighlighted | UIControlStateSelected)] 
+0

Thanx Chúa! haha ^^ Tôi đã phát điên. Và cảm ơn tất nhiên ... Tôi cũng đã thử dòng mã đó nhưng tôi đã xóa dòng cho trạng thái được đánh dấu như tôi nghĩ là thừa:/ – luca

+0

Dường như ngay cả khi bạn đặt hình nền cho trạng thái được chọn và được đánh dấu bằng IB, bạn nhận được hình ảnh được đánh dấu hệ thống (màu xám đậm) khi adjustsImageWhenHighlighted là YES (mặc định là YES) hoặc hình ảnh bình thường. Do đó, bạn cần phải viết câu trả lời của Aaron Golden. – tounaobun

5

Trong swift này sẽ là:

button.setBackgroundImage(shadowImage, forState: UIControlState.Selected.union(UIControlState.Highlighted)) 
1

Trong Swift v3 (tháng 11 năm 2016):

button.setBackgroundImage(shadowImage, for: UIControlState.selected.union(UIControlState.highlighted)) 
Các vấn đề liên quan