본문 바로가기
Swift/개발팁

[Swift] CustomView 커스텀뷰객체 재활용 - 뷰 작업 시간 단축하기

by iOS조이킴 2024. 6. 23.

안녕하세요 조이킴입니다. 🐥

뷰 작업 시간을 대폭 단축시킬 수 있는 CustomView를 소개합니다. 

CustomView class( 재사용할 수 있는 나만의 뷰객체) 개념 

 

tableView에서 재활용할 셀을 xib파일이나 tableViewCell 파일로 만들어두고 활용하는 것처럼, 반복 사용이 필요한 디자인이 있을 경우 나만의 뷰객체 틀을 만들어두고 필요한 곳마다 찍어내 사용할 수 있는 customeView를 활용하면 편리합니다. 

init() 뷰객체 찍어내는 초기화 구문  

 

parameter를 받아 활용할 수 있는 초기화구문을 만들수도 있고, 부모 클래스의 기존 초기화구문을 override 하여 사용할 수도 있습니다.

필수생성자 누락 시 오류 주의


UIView는 storyboard나 xib 파일 xml 형태로 저장하고 있고, 이걸 화면으로 가져올 때 init(coder:NSCoder)을 활용합니다.
이를 위해 UIView는 init(coder:NSCoder)를 필수생성자로 갖고 있는 NSCoder이라는 프로토콜을 채택하고 있습니다.
코드로 UIView를 상속한 클래스를 만들 때 새로 지정 생성자를 구현하게 되므로, 직접 필수생성자 required init?(coder: NSCoder)을 명시해줘야합니다. (명시하지 않을 경우 컴파일 오류가 뜨기 때문에 fix 버튼 눌러주면 해결됩니다.)

//재사용할 뷰객체의 클래스명으로 새로운 swift 파일을 생성하여 작성합니다.

import UIKit

class NicknameTextField:UITextField {
/*	1. 부모 지정생성자 상속:
    override init(frame: CGRect) {
    	super.init(frame:.zero)
        
          borderStyle = .none
        clearButtonMode = .whileEditing
        textAlignment = .left
        attributedPlaceholder = NSAttributedString(string: "직접입력", attributes: [.foregroundColor : Color.mediumGray])
    } */

//  2. 원하는 parameter 받을 수 있는 지정생성자 새로 구현:
    init(placeholder: String) {
        super.init(frame: .zero)
        
        borderStyle = .none
        clearButtonMode = .whileEditing
        textAlignment = .left
        attributedPlaceholder = NSAttributedString(string: placeholder, attributes: [.foregroundColor : Color.mediumGray])
    }
        required init?(coder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
}​

 

댓글