2017-06-24 35 views
1

我想創建一個自定義的導航欄。Swift:如何創建一個自定義的UINavigationBar並添加一個自定義的後退按鈕?

我躲在原來的導航欄在viewWillAppear中,像這樣:

override func viewWillAppear(_ animated: Bool) { 
    self.navigationController?.isNavigationBarHidden = true 
} 

我繼承UINavigationBar的,像這樣:

let navBar: UINavigationBar = { 
    let view = UINavigationBar() 
    view.backgroundColor = .clear 
    view.isTranslucent = true 
    view.translatesAutoresizingMaskIntoConstraints = false 
    return view 
}() 

在viewDidLoad中我打電話setupNavBar():

func setupNavBar() { 
    view.addSubview(navBar) 
    self.navBar.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 80) 
    let backButton = UIBarButtonItem(image: UIImage(named:"backThick"), style: .plain, target: self, action: #selector(popControllerOffStack))  
} 

問題是,backButton被添加到被隱藏的原始導航欄中。這讓我覺得我錯誤地創建了導航欄。如何將按鈕添加到navBar?


更新的代碼(仍然沒有工作):

class CustomNavBar: UINavigationBar { 
    override init(frame: CGRect) { 
     super.init(frame: frame) 
     self.backgroundColor = .red 
    } 
} 

// In the viewController 

let navBar = CustomNavBar() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    setupNavBar() 
} 

func setupNavBar() { 
    view.addSubview(navBar) 
    navBar.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 80) 
    let backButton = UIBarButtonItem(image: UIImage(named:"backThick"), style: .plain, target: self, action: #selector(popControllerOffStack)) 
    self.navigationItem.leftBarButtonItem = backButton 
} 

​​

回答

2

你是不是繼承UINavigationBar。相反,您正在創建UINavigationBar的新實例並修改其在計算變量中的屬性。這意味着每次訪問navBar時,都會初始化一個新的UINavigationBar對象。

要創建一個子類:

class MyCustomNavigationBar: UINavigationBar { 
    // Set properties in here after initialization 
} 

一旦你有一個適當的子類創建,您可以初始化實例,像這樣:

var navBar = MyCustomNavigationBar() 

最後,添加按鈕,導航欄:

let backButton = UIBarButtonItem(image: UIImage(named:"backThick"), style: .plain, target: self, action: #selector(popControllerOffStack)) 
// Assuming 'self' is an instance of UINavigationController()  
self.navigationItem.leftBarButtonItem = backButton 

查看官方Swift Programming Language Guide on Inheritance

+0

感謝,可你看看編輯。我顯然不在這裏... –

0

雨燕3.0

您可以設置自定義後退按鈕,如下圖所示

self.navigationItem.hidesBackButton = true 
    let backButton = UIBarButtonItem(image: UIImage(named: "image_name"), style: .plain, target: self, action: #selector(Class.methodName)) 
    backButton.tintColor = UIColor.white 
    self.navigationItem.leftBarButtonItem = backButton 
0

你也可以試試下面的代碼:

let btnLeftMenu: UIButton = UIButton() 
btnLeftMenu.setImage(UIImage(named: "image_name"), for:UIControlState()) 
btnLeftMenu.addTarget(self, action: #selector(moveImage), for:UIControlEvents.touchUpInside) 
btnLeftMenu.frame = CGRect(x: 0, y: 0, width: 25, height: 25) 
let barButton = UIBarButtonItem(customView: btnLeftMenu) 
self.navigationItem.leftBarButtonItem = barButton* 
相關問題