[Swift] Custom UIView의 UIButton Event를 상위 뷰인 UIViewController 에 전달하기

UIView를 필요에 따라 생성하여 사용한다.

예를 들어 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!)
            }
            
        }
    }

시험한 결과 하위뷰의 버튼 이벤트가 상위 뷰 컨트롤러에서 작동이 잘 된다.

댓글

  1. 하나는 UIView 이고 다른 하나는 UIViewController 입니다.
    소스를 볼 수 있을까요?

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

한글 2010 에서 Ctrl + F10 누르면 특수문자 안뜰 때

아이폰에서 RFID 사용하는 방법

VCC 와 GND 는 무엇일까?