2011-01-22 24 views
7

Tôi đang chỉnh sửa một số thay đổi trực quan và nhận thấy rằng khi tôi cố đặt màu nền của UIButton, nó chỉ đặt màu bên ngoài nút thực tế (không phải bên trong nút chính nó)Cách đặt màu của UIButton bên trong (không phải màu nền)

UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
button.frame = CGRectMake(6, 9, 50, 25);  
[button setTitle:@"Select" forState:UIControlStateNormal]; 
button.backgroundColor = [UIColor redColor]; 

Thuộc tính khác tồn tại sẽ cho phép tôi đặt màu?

Trả lời

0

Sử dụng setImage:forState:

- (void)setImage:(UIImage *)image forState:(UIControlState)state 

Ngoài ra, đừng quên để tạo nút bấm của bạn với [UIButton buttonWithType:UIButtonTypeCustom]

+0

Vì vậy, tôi phải sử dụng một hình ảnh w/phương pháp này? làm thế nào tôi có thể nhận được một màu duy nhất ở đây? –

+0

Có, bạn cần một hình ảnh. Bạn có thể nhận được mà không có hình ảnh nhưng nút sẽ có góc vuông. Vì vậy, hình vuông coreners, đầy màu sắc và một tiêu đề. Không có gì khác. Để làm điều đó: tạo nút của bạn dưới dạng UIButtonTypeCustom và đặt thuộc tính backgroundColor thành bất kỳ màu nào bạn cần – tux91

+4

câu trả lời rác ... – yunas

11

colored UIButton

Nếu bạn không muốn sử dụng hình ảnh, và muốn nó trông giống hệt như phong cách Rounded Rect, hãy thử điều này. Chỉ cần đặt một UIView qua UIButton, với một khung giống hệt nhau và tự động thay đổi kích cỡ mặt nạ, thiết lập alpha đến 0,3, và thiết lập nền cho một màu. Sau đó, sử dụng đoạn mã dưới đây để cắt các cạnh tròn ra khỏi chế độ xem lớp phủ màu. Ngoài ra, bỏ chọn hộp kiểm 'Tương tác người dùng đã bật' trong IB trên UIView để cho phép các sự kiện chạm xuống thác xuống UIButton bên dưới.

Một hiệu ứng phụ là văn bản của bạn cũng sẽ được tô màu.

#import <QuartzCore/QuartzCore.h> 

colorizeOverlayView.layer.cornerRadius = 10.0f; 
colorizeOverlayView.layer.masksToBounds = YES; 
+0

Đây được cho là câu trả lời đúng thay vì sử dụng hình ảnh ... – yunas

+1

Bạn cũng có thể vào lớp. corderRadius cho nút chính nó (sử dụng UIButtonTypeCustom và thiết lập các tài sản backgroundColor – jopke

2

Tôi vừa phát hiện ra một giải pháp hoạt động hoàn hảo và tôi không biết tại sao.

Nếu bạn chọn nút trong Trình tạo giao diện và mở "trình kiểm tra nhận dạng", bạn có thể thêm "Thuộc tính thời gian chạy do người dùng xác định". Nếu bạn thêm khóa "self.fillColor", với một loại màu, màu đó sẽ được sử dụng làm màu tô cho nút.

Tôi đã phát hiện ra điều này hoàn toàn do tai nạn. Tôi đã có một lớp con tùy chỉnh của UIButton gọi là ColoredButton, nơi tôi đã vẽ hình chữ nhật tròn và tự điền nó. Nó đã sử dụng thuộc tính fillColor. Tôi đã thay đổi một trong các đối tượng ColoredButton của tôi trở lại UIButton để kiểm tra một cái gì đó, và đã ngạc nhiên khi thấy rằng nó vẫn còn đầy màu sắc.

Tôi không biết tại sao nó hoạt động, nhưng nó hoạt động.

3

Đối Xamarin

var addNote = new UIButton(UIButtonType.Custom); 
     //addNote.SetImage(new UIImage("Images/11-x.png"), UIControlState.Normal); 
     addNote.SetTitle("Add Note", UIControlState.Normal); 
     addNote.Frame = new RectangleF(0, 0, 130, 30); 
     addNote.SetTitleColor(UIColor.Blue, UIControlState.Normal); 
     addNote.BackgroundColor = UIColor.LightGray; 
     addNote.Layer.CornerRadius = 10f; 
     addNote.Layer.BorderColor = new MonoTouch.CoreGraphics.CGColor(0f, 100f, 0f); 
     addNote.Layer.BorderWidth = 2f; 
     addNote.TouchUpInside += delegate 
     { 
      AddNote(); 
     }; 
+0

Tôi giả sử rất nhiều macro ... 'SetTitleColor (UIColor.Blue, UIControlState.Normal)' không làm việc cho tôi. – jerik

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