UIBarButtonItemには、typeを指定して、標準で用意されている様々なアイコンを使用できます。
(ここに一覧が掲載されています。)
しかし、 < > ∧ ∨
や、ゴミ箱アイコンといったものが用意されていません。
これを毎回画像で用意するのはしんどいし、"< >"
と文字で生成するとなんかダサいし。。
ただ、標準アプリであるSafariとか、UINavigationBarの戻るボタン等、標準で< >
を使っているのでなんとかして使えるなら使いたい。
それを解決してみます。
enum UIBarButtonHiddenItem: Int {
case Previous = 101
case Next = 102
case Up = 103
case Down = 104
case Locate = 100
case Trash = 110
func convert() -> UIBarButtonSystemItem {
return UIBarButtonSystemItem(rawValue: self.rawValue)!
}
}
extension UIBarButtonItem {
convenience init(barButtonHiddenItem item:UIBarButtonHiddenItem, target: AnyObject?, action: Selector) {
self.init(barButtonSystemItem: item.convert(), target:target, action: action)
}
}
このようにして、UIBarButtonHiddenItem
を定義して、UIBarButtonSystemItemとのブリッジを作成します。
使い方はこんな感じです。オリジナルの場合も記述しておきます。
UIBarButtonItem(barButtonHiddenItem: .Previous, target: target, action: action) // "<" が使える!
// 通常の場合
UIBarButtonItem(barButtonSystemItem: .Add, target: target, action: action)
UIBarButtonSystemItem(rawValue: )
に渡す値によって、通常は指定できないタイプのアイコンを指定でき、表示することができます。
- 101 : <
- 102 : >
- 103 : ∧
- 104 : ∨
- 100 : 位置情報のアイコン
- 110 : ゴミ箱アイコン
他にも、数値を入れると、元々UIBarButtonSystemItem
で指定できるアイコンが出現したりします。
パパっと試したい人は、以下をPlaygroundに貼り付けて実行して、viewを表示するとアイコンをみることができます。
import UIKit
enum UIBarButtonHiddenItem: Int {
case Previous = 101
case Next = 102
case Up = 103
case Down = 104
case Locate = 100
case Trash = 110
func convert() -> UIBarButtonSystemItem {
return UIBarButtonSystemItem(rawValue: self.rawValue)!
}
}
extension UIBarButtonItem {
convenience init(barButtonHiddenItem item:UIBarButtonHiddenItem, target: AnyObject?, action: Selector) {
self.init(barButtonSystemItem: item.convert(), target:target, action: action)
}
}
let toolBar = UIToolbar()
let t0 = UIBarButtonItem(title: " ", style: .Plain, target: nil, action: "")
let t1 = UIBarButtonItem(barButtonHiddenItem: .Previous, target: nil, action: "")
let t2 = UIBarButtonItem(barButtonHiddenItem: .Next, target: nil, action: "")
let t3 = UIBarButtonItem(barButtonHiddenItem: .Up, target: nil, action: "")
let t4 = UIBarButtonItem(barButtonHiddenItem: .Down, target: nil, action: "")
let t5 = UIBarButtonItem(barButtonHiddenItem: .Locate, target: nil, action: "")
let t6 = UIBarButtonItem(barButtonHiddenItem: .Trash, target: nil, action: "")
toolBar.sizeToFit()
toolBar.setItems([t0, t1, t2, t3, t4, t5, t6], animated: false)
toolBar.backgroundColor = UIColor.lightGrayColor()
let view = UIView(frame: CGRectMake(0,0,400,100))
view.addSubview(toolBar)
view.backgroundColor = .whiteColor()