2014년 12월 12일 금요일

코드로 만드는 NSButton

NSButton을 사용 할 때, 특히 코드로 버튼을 붙이거나 이벤트 핸들링을 할 때 필요한 기초적인 내용을 메모. 편의상 Objective-C 코드는 생략하고 Swift 코드 예제만 남긴다.

Cocoa의 NSButton은 Cocoa Touch의 UIButton 과는 다르게 컨테이너 역할도 하는 무시무시한 녀석이나. 왠만한 마우스 클릭 이벤트를 받는 건 NSButton을 기초로 만들어진 경우가 많은 것 같다.

1. NSButton 생성

NSButton을 생성하는 것은 일반적인 Cocoa View 오브젝트를 생성하는 것과 비슷하다.
let button = NSButton(frame: NSMakeRect(10, 10, 50, 30))
button.setButtonType(NSButtonType.NSMomentaryLightButton)
button.title = "Button"

self.someView.addSubview(button)
iOS로 코딩을 좀 해 봤다면 아마도 익숙한 모양일 것 같다. 버튼 인스턴스를 특정 Rect 기준으로 만들고 타입을 설정하고 이 버튼의 제목을 설정 하는 코드이다. 그리고 마지막으로 이 버튼을 원하는 뷰에다 붙인다.

OS X의 NSButton은 앞서 이야기 한 대로 굉장히 다양한 컴포넌트를 제공한다. 예를 들어 iOS에는 없는 체크박스(Checkbox) 버튼도 타입만 세팅하면 만들 수 있다.

2. NSButton의 이벤트 핸들러

이벤트 핸들러라고 칭하긴 했지만, 사실은 이 버튼이 클릭되었을 경우 이벤트를 받는 방법에만 한정한다.

여기서 UIButton과 다른 점이 나타나는데, NSButton에는 addTarget:action:forControlEvent 같은 류의 메소드가 없다. 그렇다면 어떻게 해야 하나?

그냥 바로 예제를 보자.
button.target = self
button.action = Selector("buttonPressed:")
어이없게도 target과 action 프로퍼티를 이용하면 된다. 다만 selector가 필요하다는 점이 있지만... 이 셀렉터에 의해 호출되는 메소드는 아래와 같은 형식으로 만들면 된다.
func buttonPressed(sender: AnyObject!) {
    println("Button Clicked!")
}
이런 식으로 버튼 클릭을 핸들링 할 수 있다.

...

실컷 적고 나서 이야기 하는데, 별 이유가 없다면 버튼은 그냥 인터페이스 빌더로 만들어 쓰자. ;-)

댓글 없음 :