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)
}
}