Custom UIView 사용 (Dialog CustomView 적용)


커스텀된 다이얼로그를 적용하기 위한 실습이다.


UIAlertController의 커스텀에는 한계가 있기 때문에 아무래도 UIView를 사용해야 할 것 같다.


완벽한지는 모르겠지만 일단 돌아가는 데에 문제는 없다..ㅋㅋ



Customed Dialog Class


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//
//  ViewAlertFavoriteAdd.swift
//  SmartShoppingCart
//
//  Created by Eteris on 2018. 5. 13..
//  Copyright © 2018년 Eteris. All rights reserved.
//
 
import UIKit
 
class ViewAlertFavoriteAdd: UIView {
 
    // Outlet
    @IBOutlet weak var et_itemTitle: UITextField!
    @IBOutlet weak var et_itemPrice: UITextField!
    @IBOutlet weak var et_itemDescription: UITextField!
    @IBOutlet weak var btn_close: UIButton!
    @IBOutlet weak var btn_add: UIButton!
    
    // identifier
    class var identifier: String
    {
        return String.className(self)
    }
    
    class func instanceFromNib() -> UIView {
        return UINib(nibName: self.identifier, bundle: nil).instantiate(withOwner: nil, options: nil)[0as! UIView
    }
    
    // MARK : btnAction
    @IBAction func btnClick_add(_ sender: UIButton) {
        
        NSLog("===== ViewAlertFavoriteAdd btnClick_add =====");
    }
    
    @IBAction func btnClick_Close(_ sender: UIButton) {
        
        NSLog("===== ViewAlertFavoriteAdd btnClick_Close =====");
        
        removeFromSuperview();
    }
    
    
    /*
    // Only override draw() if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func draw(_ rect: CGRect) {
        // Drawing code
    }
    */
 
}
 
cs


UIView를 상속받아 페이지를 구성한다. 기본적인 구성법은 storyboard나 XIB를 이용한 방법으로 구성한다.


이 경우는 XIB를 이용.



다음과 같은 형태의 다이얼로그의 IBOutlet이 연결된 형태이다.



ParentViewController.swift


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func startAlert_favoriteAdd ()
    {
        // 사용자정의 팝업
        let popup: ViewAlertFavoriteAdd = UINib(nibName: ViewAlertFavoriteAdd.identifier, bundle: nil).instantiate(withOwner: self, options: nil)[0as! ViewAlertFavoriteAdd
        popup.backgroundColor = UIColor.gray.withAlphaComponent(1)
        popup.center = CGPoint(x: self.view.frame.width / 2, y: self.view.frame.height / 2)
        popup.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height)
        popup.btn_close.addTarget(self, action: #selector(btnClick_favoriteAddDialog_add), for: .touchUpInside) // 버튼 이벤트 등록
        self.view.addSubview(popup);
    }
    
    @objc func btnClick_favoriteAddDialog_add () -> Void
    {
        NSLog("===== ViewController_item btnClick_favoriteAddDialog_add =====");
    }
cs


부모 ViewController 에서 해당 Class를 addSubView 명령으로 팝업형태로 구축하여 띄운다.


버튼의 경우 부모에서 처리하고 싶을 때 addTarget 명령으로 @objC 메소드에 연결하여 처리하도록 한다.

(이거 알아내는데 너무 오래걸렸다.. Controller가 아니라 그런지 delegate가 없는 고로 이런 방식으로 처리하면 될 것 같다.)




클릭 시 @objC func btnClick_favoriteAddDialog_add 메소드로 클릭 이벤트가 전송되어 부모 ViewController에서 이후 소스를 컨트롤 가능하다.




이 글을 공유하기


댓글(0)

Designed by CMSFactory.NET