[Swift] Custom UIView의 UIButton Event를 상위 뷰인 UIViewController 에 전달하기
UIView를 필요에 따라 생성하여 사용한다.
예를 들어 UIView 하위에 UIButton 을 추가하여 사용할 때
UIButton 의 이벤트를 상위 뷰인 UIViewController 에서 사용할 경우가 생긴다.
이경우 어떻게 해야 할까?
이때 사용하는 방법이 Protocol 이다.
일단 Custom UIView에 Protocl 을 추가한다.
예를 들어 UIView 하위에 UIButton 을 추가하여 사용할 때
UIButton 의 이벤트를 상위 뷰인 UIViewController 에서 사용할 경우가 생긴다.
이경우 어떻게 해야 할까?
이때 사용하는 방법이 Protocol 이다.
일단 Custom UIView에 Protocl 을 추가한다.
protocol ShiftViewDelegate {
// 부모 뷰로 데이터 전달을 위한 델리게이트 메소드
func dayTouchEvent(touchButton:UIButton)
}
이제 UIView 클래스에 델리게이트 변수를 추가한다.
class ShiftView: UIView {
// 부모 뷰로 데이터 전달을 위한 델리게이트
var delegate:ShiftViewDelegate?
버튼 이미지에 메소드에 델리게이트 추가한다
func ButtonTouch(button:UIButton) {
// 버튼 크기를 키움
button.transform = CGAffineTransformMakeScale(1.5, 1.5)
// 버튼 크기 원상복구
UIView.animateWithDuration(0.8) {
button.transform = CGAffineTransformMakeScale(1.0, 1.0)
}
// 부모 뷰로 데이터 전달
delegate?.dayTouchEvent(button)
}
이제 UIViewController 에 델리게이트를 추가한다.
class ViewController: UIViewController, ShiftViewDelegate
이제 델리게이트를 할당한다.
var cView = ShiftView(frame: cFrame)
cView.delegate = self
이제 델리게이트 메소드를 추가한다.
// ShiftViewDelegate 메소드, 터치한 날의 데이터 가져옴
func dayTouchEvent(touchButton: UIButton) {
for label in touchButton.subviews as! [UILabel] {
if label.tag == 101 {
println("Button Touch Day:" + label.text!)
}
}
}
시험한 결과 하위뷰의 버튼 이벤트가 상위 뷰 컨트롤러에서 작동이 잘 된다.
저는 잘 안됩니다. ㅠㅠ
답글삭제하나는 UIView 이고 다른 하나는 UIViewController 입니다.
답글삭제소스를 볼 수 있을까요?