2014-07-15 14 views
6

Tôi đang cố gắng để thiết lập hình ảnh nút quay lại trong thanh nav trong điều khiển của tôi, đây là mã của tôi trong viewDidLoad():nhanh chóng: thiết lập lại nút hình ảnh trong thanh nav

 var backImg: UIImage? = UIImage(named: "back_btn.png") 
    println(backImg) 
    if var back_img = backImg { 
     println("GET IT") 
     println(back_img) 
     println(UIControlState.Normal) 
     println(UIBarMetrics.Default) 
    self.navigationController.navigationBar.backItem.backBarButtonItem.setBackButtonBackgroundImage(back_img, forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default) 
    } 

tôi đã cố gắng để đưa chúng vào viewWillLoad, nhưng nhận được lỗi tương tự

Bảng điều khiển với thông báo lỗi:

<UIImage: 0x7ff37bd85750> 
GET IT 
<UIImage: 0x7ff37bd85750> 
VSC14UIControlState (has 1 child) 
(Enum Value) 
fatal error: unexpectedly found nil while unwrapping an Optional value 

tôi không biết đó là một phần đã đi sai. Có vẻ như back_img không phải là số không, nhưng tôi nhận được lỗi nói rằng đó là số:

Cảm ơn!

Trả lời

12

Tôi đã tìm ra bằng cách xem xét mã mẫu. 1) Tạo mục nút thanh trong bảng phân cảnh. 2) Liên kết rằng nút để điều khiển sử dụng IBOutlet 3) Thêm hình ảnh vào nút

var backImg: UIImage = UIImage(named: "back_btn") 
backBtn.setBackgroundImage(backImg, forState: .Normal, barMetrics: .Default) 

PS: hình ảnh nên được thêm vào thư mục Images.xcassets, xem mẫu mã, UICatalog, để biết chi tiết.

+0

Xin chào, hình ảnh của tôi được kéo dài đối với một số lý do. Kích thước hình ảnh của bạn là bao nhiêu? –

+0

có, cùng ở đây! – Vanya

+0

Hình ảnh được kéo dài do không gian được phân bổ cho mục thanh theo mặc định. Một cách để giải quyết vấn đề này là chọn mục điều hướng trong bảng phân cảnh và đặt một khoảng trống duy nhất trong hộp văn bản 'Nút Quay lại'. Sau đó, khi bạn thiết lập một hình ảnh, nó được giới hạn trong không gian còn lại ... một cách khác là đặt UIButton làm mục BarButton. – goggelj

15

Nếu bạn muốn thay đổi nút quay lại trong mỗi bộ điều khiển, bạn có thể thêm video này vào ứng dụng đại biểu trong didFinishLaunchingWithOptions

let backImg: UIImage = UIImage(named: "back_button")! 
    UIBarButtonItem.appearance().setBackButtonBackgroundImage(backImg, forState: .Normal, barMetrics: .Default) 
+0

Cảm ơn bạn rất nhiều. – Felipe

+2

Nhưng nó vẫn hiển thị văn bản –

+0

@ChanchalRaj UIBarButtonItem.appearance(). SetBackButtonTitlePositionAdjustment (UIOffsetMake (0, -60), for: UIBarMetrics.default) điều này sẽ làm thủ thuật – nidhin

1

cách khác: nhấp chuột trên bộ điều khiển chuyển hướng trong kịch bản (không phải là điều khiển chuyển hướng trong UIViewController chinh no). Sau đó, trong phần thuộc tính trên RHS bạn sẽ thấy lại hình ảnh và mặt sau. Đặt lại hình ảnh và bạn đã hoàn tất.

3

// Đây là giải pháp hoàn hảo Để Đặt lại nút với hình ảnh và hành động trong mặc định Navigation Bar

Đầu tiên thêm UIBarButton trong Navigation thanh

enter image description here

Sau đó Tới tài sản trong Thanh tra tệp trong bảng phân cảnh và thêm dấu cách để ẩn văn bản tiêu đề của nút quay lại

Đặt hình ảnh trong nút hình ảnh Ui Bar

enter image description here

/Viết về phương pháp hành động nhấp/

Để kích hoạt swipe để bật (trở về điều khiển trước), viết hai dòng mã trong viewDidLoad phương pháp

enter image description here

Và bạn sẽ nhận được hoàn thiện Nút Quay lại với Swipe để sao lưu hình ảnh động

enter image description here

// Lưu ý: - Để vô hiệu hóa nút trở lại tiêu đề viewController trước, thêm một không gian trong văn bản tiêu đề ở nút quay lại trong thanh tra tập tin kịch bản

+0

Vui lòng bao gồm văn bản có thể tìm kiếm và có thể chọn cho mã thay vì hình ảnh. –

5
self.navigationController?.navigationBar.backIndicatorImage = UIImage(named: "back-icon") 
    self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "back-icon") 
11

trong Swift 3.0 đặt dưới mã trong appdelegatedidFinishLaunchingWithOptions phương pháp, nó sẽ làm việc một cách hoàn hảo

let backImage = UIImage(named: "BackNavigation")?.withRenderingMode(.alwaysOriginal) 
UINavigationBar.appearance().backIndicatorImage = backImage 
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage 
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -80.0), for: .default) 

Dòng cuối cùng sẽ loại bỏ các danh hiệu Navigation Back Button nếu bạn không muốn để loại bỏ tiêu đề sau đó chỉ cần loại bỏ dòng cuối cùng

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