2014-10-21 12 views
14

Tôi đang cố gắng để thiết lập font của UIBarButtonItem như vậy:Lỗi khi instantiating một UIFont trong một thuộc tính văn bản từ điển

let barButton = UIBarButtonItem.appearance() 
barButton.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "AvenirNext", size: 15], forState: UIControlState.Normal) 

Nhưng nó ném một lỗi biên dịch nói:

Không thể gọi 'init' với loại danh sách đối số '($ T7, forState: UIControlState) `

và tôi không biết điều đó có nghĩa là gì. Tôi cũng đã cố gắng

barButton.titleTextAttributesForState(UIControlState.Normal) =[NSFontAttributeName...]` 

nhưng có vẻ như nó không phải là chuyển nhượng

Làm thế nào tôi có thể giải quyết này?

Trả lời

27

Các initializer của UIFont trả về một tùy chọn, vì nó có thể thất bại do tên phông chữ sai chính tả, vv

Bạn phải unwrap nó và kiểm tra:

if let font = UIFont(name: "AvenirNext", size: 15) { 
    barButton.setTitleTextAttributes([NSFontAttributeName: font], forState: UIControlState.Normal) 
} 

CẬP NHẬT cho Swift 3

if let font = UIFont(name: "AvenirNext", size: 15) { 
    barButton.setTitleTextAttributes([NSFontAttributeName:font], for: .normal) 
} 
+1

Tuy nhiên ném lỗi mà ... Và cú pháp này làm việc cho tôi cho đến khi tôi cập nhật để Xcode 6.1 – Eilon

+0

này giải quyết vấn đề của tôi, nhưng tôi cũng đã bao giờ nhìn thấy vấn đề này trước 6.1. – Andrew

2

Đặt Phông chữ tùy chỉnh hơi phức tạp, vì chúng không có fonttitle thuộc tính. Hy vọng câu trả lời sau đây sẽ giúp bạn.

let font = UIFont(name: "<your_custom_font_name>", size: <font_size>) 
var leftBarButtonItem = UIBarButtonItem(title: "<font_hex_code>", style: UIBarButtonStyle.Plain, target: self, action: "buttonClicked:") 
leftBarButtonItem.setTitleTextAttributes([NSFontAttributeName:font!], forState: UIControlState.Normal) 
self.navigationItem.leftBarButtonItem = leftBarButtonItem 
1
if let font : UIFont = UIFont(name: "Roboto-Regular", size: 15) 
     { 
      cancelBarButton.setTitleTextAttributes([NSFontAttributeName: font], forState: UIControlState.Normal) 
      doneBarButton.setTitleTextAttributes([NSFontAttributeName: font], forState: UIControlState.Normal) 

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