뷰의 재사용

임혜정·2024년 8월 31일
0
post-custom-banner

뷰의 레이아웃이 일치하는 데 여러페이지에서 쓰는 경우
즉 단일뷰 , 다수의 vc

1. UIView 서브클래스를 재사용하는 방법 (Reusable View Class)

UIView의 서브클래스를 만들고 이 서브클래스를 여러 ViewController에서 재사용하는 방법.
가장 일반적이고 UIView를 독립된 컴포넌트로 만들어 필요한 곳에 쉽게 재사용할 수 잇드

class CustomView: UIView {
    // Custom view setup
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupView()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setupView()
    }
    
    private func setupView() {
        // View setup code
        self.backgroundColor = .blue
    }
}

ViewController에서의 사용

class FirstViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let customView = CustomView()
        view.addSubview(customView)
        customView.frame = view.bounds // 기타 레이아웃 설정
    }
}

class SecondViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let customView = CustomView()
        view.addSubview(customView)
        customView.frame = view.bounds // 기타 레이아웃 설정
    }
}

2. 뷰를 팩토리 메서드로 생성하여 주입 (View Factory Pattern)

UIView 생성 로직을 팩토리 메서드로 캡슐화하여, 필요한 ViewController에 주입하기.
뷰생성하는 로직을 중앙 집중화하고 주입하는 방식으로 유연하게 할수있다

class ViewFactory {
    static func createCustomView() -> CustomView {
        let view = CustomView()
        // Additional setup if necessary
        return view
    }
}

ViewController에서 팩토리 메서드를 통해 뷰를 생성하고 주입받는다

class FirstViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let customView = ViewFactory.createCustomView()
        view.addSubview(customView)
        customView.frame = view.bounds
    }
}

class SecondViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let customView = ViewFactory.createCustomView()
        view.addSubview(customView)
        customView.frame = view.bounds
    }
}

3. UIViewControllerContainer View 활용

만약 UIView뿐만 아니라 해당 뷰의 컨트롤러와 관련된 로직까지 재사용해야 하는 경우
Container View 또는 Child View Controller 패턴을 활용. 이 방법은 복잡한 뷰와 로직을 모듈화해서 재사용

class ReusableViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .red
        // Setup your reusable view and logic here
    }
}

// Parent ViewController
class FirstViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let reusableVC = ReusableViewController()
        addChild(reusableVC)
        view.addSubview(reusableVC.view)
        reusableVC.view.frame = view.bounds
        reusableVC.didMove(toParent: self)
    }
}

정리

  • 재사용이 간단한 경우: UIView 서브클래스를 직접 만들어 사용하는 것이 가장 간단하고 명확하고.
  • 뷰 생성 로직이 복잡하거나 여러 변형이 필요한 경우: 팩토리 메서드 패턴을 사용하여 뷰를 생성하고 주입하는 방식이 좋다
  • 뷰와 관련된 로직까지 재사용할 필요가 있는 경우: UIViewControllerContainer ViewChild View Controller를 사용하여 재사용
profile
오늘 배운걸 까먹었을 미래의 나에게..⭐️
post-custom-banner

0개의 댓글