2017-06-24 10 views
1

カスタムナビゲーションバーを作成しようとしています。Swift:カスタムUINavigationBarを作成し、カスタムの戻るボタンを追加するにはどうすればよいですか?

私はそうのようにviewWillAppearで元navigationBarを隠しています:

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

私はそうのようなUINavigationBarをサブクラス化しています:のviewDidLoadで

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

を私は)(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))  
} 

問題は、隠されている元のnavigationBarに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* 
関連する問題