23 May 2015

UIButton의 SubClass로 만들어 객체 생성시 자신에게 addTarget를 추가하여 기본적으로 로그 등의 기록을 남길 수 있습니다.

import UIKit

class SSPButton: UIButton {
  convenience init() {
    self.init(frame: CGRectZero);
  }
  
  required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.setup()
  }
  
  override init(frame: CGRect) {
    super.init(frame: frame)
    self.setup()
  }
  
  deinit {
    self.removeTarget(self, action:Selector("sendLog:"), forControlEvents: .TouchUpInside)
  }
}

extension SSPButton {
  func setup() {
    self.addTarget(self, action: Selector("sendLog:"), forControlEvents: .TouchUpInside)
  }
  
  @IBAction func sendLog(btn: SSPButton) {
    println("Send Log")
  }
}

또한, UIControlEvents가 중복지정되더라도 갱신되지 않습니다. 따라서 생성 후 addTarget를 추가하여 지정한 메소드와 생성 시 지정한 메소드가 호출 됩니다. 그리고 호출되는 순서는 생성시 지정된 메소드가 먼저 호출되며, 생성 후에 지정된 메소드가 뒤에 호출됩니다.