2011-02-05 22 views
27

Tôi muốn tạo một UIButton với kiểu UIButtonTypeCustom (cho hình dạng). Tôi muốn gán tiêu đề bằng cách sử dụng button.titleLabel vì tôi cần chỉ định phông chữ. Đoạn mã sau trông giống như nó sẽ hoạt động, nhưng không - không có nhãn xuất hiện, thời gian.iOS: UIButton titleLabel - nó có làm gì không?

UIImage *editButtonImage = [UIImage imageNamed: @"editButton.png"]; 
float width = editButtonImage.size.width; 
float height = editButtonImage.size.height; 

UIButton *editButton = [UIButton buttonWithType: UIButtonTypeCustom]; 
editButton.frame = CGRectMake(0, 0, width, height); 
[editButton setBackgroundImage: editButtonImage forState: UIControlStateNormal]; 
editButton.adjustsImageWhenHighlighted = YES; 
editButton.titleLabel.text = @"Edit"; 
editButton.titleLabel.textColor = [UIColor whiteColor]; 
editButton.titleLabel.textAlignment = UITextAlignmentCenter; 
editButton.titleLabel.font = [UIFont fontWithName: @"Helvetica" size: 14]; 
[self.view addSubview: editButton]; 

Mọi người luôn nói sử dụng setTitle: forState: nhưng điều đó mang lại cho bạn phông chữ tôi không thích. Phương thức titleLabel KHÔNG được dùng nữa - nó sẽ hoạt động.

Tôi đã chạy vào điều này nhiều lần trước và luôn luôn chỉ làm việc xung quanh nó, nhưng tôi thực sự muốn tìm ra. Bất kỳ ý tưởng?

Trả lời

79

Đặt thuộc tính titleLabel 's text như vậy không có hiệu lực. Thay vào đó, hãy gọi -setTitle:forState: vào nút:

[editButton setTitle:@"Edit" forState:UIControlStateNormal] 

Lý do cho điều này là bởi vì các nút có thể có tiêu đề khác nhau cho các quốc gia khác nhau (ví dụ, UIControlStateDisabled, UIControlStateHighlighted). Đặt thuộc tính cho trạng thái kiểm soát UIControlStateNormal sẽ áp dụng cho tất cả các trạng thái nếu bạn không chỉ định rõ ràng các trạng thái khác.

mỗi tài liệu cho UIButton:

Lớp này cung cấp phương pháp để thiết lập các tiêu đề, hình ảnh, và các thuộc tính xuất hiện khác của một nút. Bằng cách sử dụng các trình truy cập này, bạn có thể chỉ định một giao diện khác cho mỗi trạng thái nút.

Bạn có thể tùy chỉnh màu và màu bóng của nhãn dựa trên trạng thái. Xem tương ứng -setTitleColor:forState-setTitleShadowColor:forState. Phần còn lại của thuộc tính trên titleLabel, chẳng hạn như textAlignmentfont, sẽ hoạt động khi bạn đặt chúng ngay bây giờ và nên áp dụng cho tất cả các trạng thái kiểm soát.

Cụ thể, xem tài liệu cho UIButton 's titleLabel tài sản: https://developer.apple.com/documentation/uikit/uibutton/1623992-titlelabel

titleLabel chính nó là read-only, nhưng điều đó không có nghĩa là bạn không thể thay đổi giá trị tài sản riêng của mình, chẳng hạn như font chữ, chế độ ngắt dòng, v.v.

+1

Vì vậy, điều ONE bạn không thể đặt bằng titleLabel là giá trị văn bản thực tế. Điều đó có vẻ hơi lạ với tôi, nhưng được rồi. – Amagrammer

+4

Ban đầu, nó có một chút phản trực giác. Dường như, việc thiết lập thuộc tính 'text' của nhãn sẽ chỉ là một phím tắt để gọi' -setTitle: forState', nhưng nó không phải là. – LucasTizma

+2

Tương tự như vậy, có vẻ như bạn không thể đặt thuộc tính textColor của titleLabel trực tiếp, nhưng phải sử dụng phương thức setTitleColor: forState:. Cảm ơn bạn đã đề cập đến điều này, bởi vì nó không có trong tài liệu hướng dẫn. – arlomedia

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