투케이2K

155. (ios/swift) xib 파일 생성 및 커스텀 화면 제작, delegate 딜리게이트 이벤트 알림 전달 실시 본문

IOS

155. (ios/swift) xib 파일 생성 및 커스텀 화면 제작, delegate 딜리게이트 이벤트 알림 전달 실시

투케이2K 2022. 7. 5. 16:32

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT

 

[방법 설명]

 

[UIView [xib] : 소스 코드]

import Foundation
import UIKit



// [protocol 정의 실시 : 클래스 외부에 선언]
protocol SendData {
    
    // [인풋 파라미터 : 뷰 컨트롤러 , String 데이터]
    func sendValue(_value : String)
}




// [클래스 정의 부분]
class UserInfoView: UIView {
    
    
    // MARK: - [초기 전역 변수 선언 실시]
    let ACTIVITY_NAME = "UserInfoView"
    
    var delegate: SendData? // [딜리게이트 선언]
    
    var count = 1 // [카운트 변수 선언]
    
    
    
    
    // MARK: - [사용자 정의 초기화]
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> init [1] :: 사용자 정의 초기화]")
        print("====================================")
        print("")
        
        // [뷰 초기화 수행 실시]
        self.initialize()
    }
    
    
    
    
    
    // MARK: - [사용자 정의 초기화]
    override init(frame:CGRect) {
        super.init(frame: frame)
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> init [2] :: 사용자 정의 초기화]")
        print("====================================")
        print("")
        
        // [뷰 초기화 수행 실시]
        self.initialize()
    }
    
    
    
    
    
    // MARK: [초기화 함수 정의 실시]
    private func initialize(){
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> initialize() :: 뷰 초기화 수행 실시]")
        print("====================================")
        print("")
        
        // [스토리 보드 지정 및 뷰 추가 실시]
        let bundle = Bundle.init(for: self.classForCoder)
        if let view = bundle.loadNibNamed("UserInfo", owner: self, options: nil)?.first as? UIView {
            view.frame = self.bounds
            view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
            addSubview(view)
        }
        else {
            return
        }
    }
    
    
    
    
    
    // MARK: - [카운트 버튼 클릭 이벤트]
    @IBAction func countButtonAction(_ sender: Any) {
        
        // [딜리게이트 메시지 반환 실시]
        self.delegate?.sendValue(_value: String(describing: self.count))
        
        // [카운트 증가]
        self.count = self.count + 1
    }
    
} // [클래스 종료]
 

[뷰 컨트롤러 : 소스 코드]

import UIKit
import Foundation


// MARK: [xib 클래스에서 추가한 프로토클 상속]
class A_Main: UIViewController, SendData {
    
    
    // MARK: - [클래스 설명]
    /*
    // -----------------------------------------
    1. 메인 화면 액티비티
    2. 사용하는 스토리보드 : Main
    // -----------------------------------------
    */
    
    
    
    
    
    // MARK: - [빠른 로직 찾기 : 주석 로직 찾기]
    // -----------------------------------------
    // [SEARCH FAST] : []
    // -----------------------------------------
    
    
    
    
    
    // MARK: - [전역 변수 선언 실시]
    let ACTIVITY_NAME = "A_Main"
    
    
    
    
    
    // MARK: - [뷰 로드 실시]
    override func viewDidLoad() {
        super.viewDidLoad()
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> viewDidLoad() :: 뷰 로드 실시]")
        print("====================================")
        print("")
        
        
    }
    
    
    
    
    
    // MARK: - [뷰 로드 완료]
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> viewWillAppear() :: 뷰 로드 완료]")
        print("====================================")
        print("")
    }
        
    
    
    
    
    // MARK: - [뷰 화면 표시]
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> viewDidAppear() :: 뷰 화면 표시]")
        print("====================================")
        print("")
        
        // [뷰 추가 실시]
        let userInfoView = UserInfoView(frame: CGRect(x: 105, y:200, width:200, height: 200))
        self.view.addSubview(userInfoView)
        userInfoView.delegate = self // [딜리게이트 지정]
    }
        
    
    
    
    
    // MARK: - [뷰 정지 상태]
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> viewWillDisappear() :: 뷰 정지 상태]")
        print("====================================")
        print("")
    }
        
    
    
    
    
    // MARK: - [뷰 종료 상태]
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> viewDidDisappear() :: 뷰 종료 상태]")
        print("====================================")
        print("")
    }
    
    
    
    
    
    // MARK: - [딜리게이트 메소드 정의 실시]
    func sendValue(_value : String) {
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> sendValue() :: 딜리게이트 메시지 전달 받음]")
        print("value :: \(_value)")
        print("====================================")
        print("")
    }

    
} // [클래스 종료]
 

[결과 출력]


 

반응형
Comments