2012-12-30 30 views
14

Tôi có phương thức tạo UIButton tùy chỉnh cho phép tôi thay đổi màu của nút bằng cách sử dụng QuartzCore. Nhưng các nút không làm nổi bật khi chạm vào.Tùy chỉnh UIButton không làm nổi bật khi chạm vào

- (UIButton *)makeHeaderButton { 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    UIFont *textFont = [UIFont boldSystemFontOfSize:12]; 
    UIColor *textColor = [UIColor colorWithRed:80/255.0 green:109/255.0 blue:145/255.0 alpha:1.0]; 
    UIColor *backgroundColor = [UIColor colorWithRed:250/255.0 green:250/255.0 blue:250/255.0 alpha:1.0]; 
    [button setTitleColor:textColor forState:UIControlStateNormal]; 
    button.titleLabel.font = textFont; 
    button.autoresizesSubviews = YES; 
    button.layer.cornerRadius = 8; 
    button.layer.borderWidth = 1; 
    // next 2 properties set using QuartzCore class, no other way to set button colors 
    button.layer.borderColor = [UIColor grayColor].CGColor; 
    button.layer.backgroundColor = backgroundColor.CGColor; 
    button.clipsToBounds = YES; 
    return button; 
} 

Làm cách nào để làm nổi bật các nút này như nút tròn thông thường?

Trả lời

13

Trong mã của bạn, hãy thêm dòng button.showsTouchWhenHighlighted = TRUE;

+1

Đó chỉ có vẻ để làm cho tiêu đề mờ dần và in. Tôi muốn nền nút nhấp nháy thành màu xanh khi nút được chạm vào. – Bob

+1

@Bob Bạn luôn có thể thiết lập đánh dấu thủ công. Ví dụ: Đăng ký cho một sự kiện 'onTouchDown' (hoặc bất cứ điều gì nó là) và sau đó trong việc thực hiện làm một cái gì đó như' button.layer.backgroundColor = [UIColor BlueColor]; 'Sau đó,' onTouchUp' thay đổi màu sắc trở lại thiết lập của bạn – Garrett

+5

Wow , điều này trở nên phức tạp. Tất cả những gì tôi muốn làm là tạo một nút RoundRect với màu nền tùy chỉnh. Chắc chắn có một cách đơn giản hơn để làm điều này. – Bob

-4

Trong bảng phân cảnh đặt hình ảnh mặc định nền nút và hình ảnh được đánh dấu. về hành động Nút viết dòng này ví dụ: thay đổi màu nút trong 1 giây

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]]; 
-1

Có cách dễ dàng để thực hiện điểm nhấn vào nút tùy chỉnh. 1. tạo hình ảnh .png cho trạng thái đánh dấu (có màu, alpha, v.v.); 2. truy cập yourbutton.xib; 3. chọn Thuộc tính Thanh tra ở bên phải của XCode; 4. thiết lập cấu hình nhà nước như nổi bật 5. đặt bạn .png hình ảnh làm hình nền. Bạn được hoan nghênh :)

5

Nếu ai đó vẫn gặp vấn đề - bạn nên tạo UIButton như thế này:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem]; 

btn.layer.cornerRadius = 4; 
btn.layer.masksToBounds = YES; 

[btn setTranslatesAutoresizingMaskIntoConstraints:NO]; 

[btn setBackgroundColor:[UIColor greenColor]]; 
[btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 

[btn setTitle:@"ok" forState:UIControlStateNormal]; 

*** any customisation that you would like *** 

[parentView addSubview: btn]; 

Vì vậy, bằng cách này bạn vẫn có iOS chăm sóc của tất cả làm nổi bật. Điều quan trọng là sử dụng

[UIButton buttonWithType:UIButtonTypeSystem]; 

Nếu bạn sử dụng initWithFrame hoặc bất kỳ phương pháp nào khác - bạn sẽ phải thực hiện

setTitleColor: forState: 
setBackgroundImage: forState: 
+2

Sử dụng nút Hệ thống so với nút Tùy chỉnh là khóa. Ngay cả khi nút được tạo trên Bảng phân cảnh hoặc Nib. hình ảnh trên nút thay đổi nó thành một nút tùy chỉnh, vì vậy bạn cần phải thay đổi nó trở lại bằng tay. –

2

Bạn có thể tạo lớp con của riêng bạn UIButton (sau đó bạn chỉ cần đặt tất cả thoses tài sản trong hàm tạo).

Và bạn phải ghi đè lên các phương pháp nổi bật của UIButton

- (void)setHighlighted:(BOOL)highlighted { 
    if (highlighted) { 
     self.backgroundColor = [UIColor redColor]; 
    } else { 
     self.backgroundColor = [UIColor blueColor]; 
    } 
} 
0

Đối Swift, tạo ra một lớp tùy chỉnh mà thừa hưởng từ UIButton và ghi đè isHighlighted tài sản:

class ButtonWithHighlight: UIButton { 

    override var isHighlighted: Bool { 
     get { 
      return super.isHighlighted 
     } 
     set { 
      if newValue { 
       backgroundColor = <#color when highlighted#> 
      } 
      else { 
       backgroundColor = <#color for normal state#> 
      } 
      super.isHighlighted = newValue 
     } 
    } 

} 
Các vấn đề liên quan