Swift2でUIBarButtonItem作成

戻るボタンのカスタムは無理な模様
leftButtonを戻るボタンとして実装してボタン押下時のイベントを取得している




文字列のBarButton


テキストのみを表示
フォントの変更も可能

var backButton = UIBarButtonItem(title: "<戻る",
        style: .Plain,
        target: self,
        action: #selector(selectorName))

        let font = UIFont(name: "HelveticaNeue-Bold", size: 18.0)
        backButton.setTitleTextAttributes([NSFontAttributeName: font!], forState: UIControlState.Normal)


システム組み込みのBarButton


Done, Cancel, Edit, Save, Add, FlexibleSpace, FixedSpace, Compose, Reply, Action, Organize, Bookmarks, Search, Refresh, Stop, Camera, Trash, Play, Pause, Rewind, FastForward
などがある
https://www.lancork.net/2014/12/ios-uibarbuttonsystemitem-icon-images/
隠されているアイコンなどもあるようだがあまり使わないほうがいいかと
http://blog.sgr-ksmt.org/2016/02/14/hidden_bar_button/


var backButton = UIBarButtonItem(barButtonSystemItem: .Add,
        target: self,
        action: #selector(selectorName))




背景が画像のBarButton


UIImageを読み込むだけだと背景が真っ青(tintColor)になってしまうのでmageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)を記述すること
以下の例だとback.pngをプロジェクトに追加している

var backButton = UIBarButtonItem(image: UIImage(named: "back")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal),
        style: .Plain,
        target: self,
        action: #selector(selectorName))




最小限のソースコード


見ての通り戻るボタンのイベントが取得したかったわけですが残念ながらこういうやり方しかないようで

class CustomViewController: UIViewController {
    
    /** 戻るボタンカスタム */
    var backButton: UIBarButtonItem!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        // テキスト
        self.title = "タイトル"
        backButton = UIBarButtonItem(title: "<戻る",
         style: .Plain,
         target: self,
         action: #selector(CustomViewController.onBack))
        let font = UIFont(name: "HelveticaNeue-Bold", size: 18.0)
        backButton.setTitleTextAttributes([NSFontAttributeName: font!], forState: UIControlState.Normal)
        

        // 組み込み
        backButton = UIBarButtonItem(barButtonSystemItem: .Add, 
        target: self, 
        action: #selector(CustomViewController.onBack))
        
        
        // 画像
        backButton = UIBarButtonItem(image: UIImage(named: "back")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal), 
        style: .Plain, 
        target: self, 
        action: #selector(CustomViewController.onBack))
        
        self.navigationItem.leftBarButtonItem = backButton
        
    }
    
    func onBack() {
        
        // 条件によってキャンセルとか
        self.navigationController?.popViewControllerAnimated(true)
        
    }
}

2016年9月12日月曜日