ABOUT ME

Today
Yesterday
Total
  • UIBarButtonItem을 만들어보자
    앱등이에게 살충제를 뿌린다./일기는 일기장에 2016. 8. 6. 20:19

    <사진 출처 : 구글검색 uitoolbar>


    UIBarButtonItem은 UIToolbar, UINavigationBar 등의 메뉴에 사용된다. 사용은 아래와 같다. 

    (결과참조:http://rhammer.tistory.com/173)

    import UIKit
    class ViewController: UIViewController {
    override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.toolbarHidden = false
    toolbarItems = makeToolbarItems()
    }
    private func makeToolbarItems() -> [UIBarButtonItem] {
    let space = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: self, action: nil)
    let edgeSpace = UIBarButtonItem(barButtonSystemItem: .FixedSpace, target: self, action: nil)
    let buttonItem1 = UIBarButtonItem(barButtonSystemItem: .Action, target: nil, action: nil)
    let buttonItem2 = UIBarButtonItem(barButtonSystemItem: .Bookmarks, target: nil, action: nil)
    let buttonItem3 = UIBarButtonItem(barButtonSystemItem: .Camera, target: nil, action: nil)
    let buttonItem4 = UIBarButtonItem(barButtonSystemItem: .Search, target: nil, action: nil)
    let buttonItem5 = UIBarButtonItem(barButtonSystemItem: .Refresh, target: nil, action: nil)
    return [edgeSpace, buttonItem1, space, buttonItem2, space, buttonItem3, space, buttonItem4, space, buttonItem5, edgeSpace]
    }
    }
    view raw ddalba.swift hosted with ❤ by GitHub



    여기에 포스팅할 내용은 이 UIBarButtonItem을 만드는 방법에 관한 것이다.

    1. 시스템에서 제공하는 item

    위 예제를 참조하세요!


    2. 이미지만 갖고 만드는 item

    let imgIcon = UIImage(named: imgName)?.imageWithRenderingMode(.AlwaysOriginal)
    let barButtonItem = UIBarButtonItem(image: imgIcon, style: .Plain, target: self, action: #selector(onTouchedTab(_:)))


    3. 타이틀만 갖고 만드는 item

    let item = UIBarButtonItem(title: "타이틀", style: .Plain, target: self, action: #selector(onTouchedTab(_:)))


    4. 커스텀 UIView를 갖고 만드는 item

    사실 이 4번이 핵심이다. 1,2,3 번은 쉬운데 4번은 생각보다 까다롭다. 4번은 아래의 메소드를 사용해야 한다.

    Declaration

    SWIFT

    convenience init(customView customViewUIView)

    OBJECTIVE-C

    - (instancetype)initWithCustomView:(UIView *)customView


    이 메소드만 보고는 이런 코드를 떠올리기가 쉽다.

    이 소스의 경우에 탭을 터치해도 onTouchedTab이 호출되지 않는다. customView로 barButtonItem을 생성하면 아무래도 target/action을 지정할 수 없는듯 했다.

    let customView = UIView()
    customView.addSubview(imageView)
    customView.addSubview(label)
    let item = UIBarButtonItem(customView: customView)
    item.target = self
    item.action = #selector(onTouchedTab(_:))



    그래서 UIView가 아닌 UIButton으로 customView를 생성하여 이 문제를 해결할 수 있다.

    let customView = UIButton()
    customView.addSubview(imageView)
    customView.addSubview(label)
    view.addTarget(self, action: #selector(onTouchedTab(_:)), forControlEvents: .TouchUpInside)
    let item = UIBarButtonItem(customView: customView)


    이 때 onTouchedTab메소드의 parameter로 들어오는 sender의 타입을 UIBarButtonItem이 아닌 UIButton이라는 점을 아는 것이 좋다.

    아무래도 다른 방법이 있을 것 같으므로, 아는 분은 알려주시면 감사하겠습니다.

Designed by Tistory.