보안 키보드 만들기

Swift 2021. 2. 13. 01:26

file > new > file > Cocoa Touch Class > Subclass of: uiview

(xib파일은 view나 empty나 똑같음)

file > new > file > view > (이름은 연동해서 사용할 class 이름과 같이 사용하는 게 편함)

 

xib파일은 nib파일과 동일

 

컨트롤러가 아닌 걸 추가하고 싶은 경우에는 xib파일을 사용

컨트롤러는 스토리보드에 추가할 수 있지만 컨트롤러가 아닌 거는 추가를 할 수 없음

 

size를 freeform으로 하면 원하는 데로 크기를 조절할 수 있음

 

생성한 xib에 view class 이름을 Cocoa Tocuh Class에 입력한 이름으로 입력

 

 

Interaction에 User Interaction Enabled 체크를 해제하면 해당 버튼의 이벤트가 없어짐(눌러도 아무런 입력이 없음)

 

delegate

- 기능이나 값을 위임

- 오브젝트가 끊어지지 않고 남아있어서 메모리 누수가 생길 수도 있기 때문에 옵셔널로 선언

 

 

if let - 옵셔널 타입을 벗겨냄

 

 

 

viewcontroller.swift

import UIKit

class ViewController: UIViewController, CustomKeyboardDelegate {
    
    @IBOutlet weak var FirstTextView: UITextField! // 첫번째 텍스트 이름
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 커스텀 키보드 설정 방법
        // owner / option 값이 있으면 self를 입력 하면 됨
        let loadNib = Bundle.main.loadNibNamed("CustomKeyboard", owner: nil, options: nil)
        
        // array와 같은 개념 first, 첫번째 인덱스 즉 0번째 인덱스에 있는 오브젝트를 가져오라는 뜻
        // as! 타입 캐스팅
        let myKeyboardView = loadNib?.first as! CustomKeyboard
        
        // 뷰 컨트롤러로 위임
        myKeyboardView.delegate = self
        FirstTextView.inputView = myKeyboardView
    }
    // 키보드 눌렀을때 호출
    func KeyboardTapped(str: String) {
        print(str)
        
        // 타입 변환
        // 기존에 입력한 숫자
        let oldNum = Int(FirstTextView.text!)
        
        // 새로 입력한 숫자
        var newNum = Int(str)
        
        if str == "00" && oldNum != nil {
            newNum = oldNum! * 100 // nil이기 때문에 ! 해도 됨
        }
        
        if str == "000" && oldNum != nil {
            newNum = oldNum! * 1000
        }
        
        if let hasNum = newNum {
            // 쉼표 만들기
            let numberFormatter = NumberFormatter()
            numberFormatter.numberStyle = .decimal
            
            if let formatted = numberFormatter.string(from: NSNumber(value: hasNum)) {
                FirstTextView.text = String(describing: formatted)
            }
        }
    }
}

 

 

cocoa touch class로 만든 파일

import UIKit

protocol CustomKeyboardDelegate {
    func KeyboardTapped(str: String)
}

class CustomKeyboard: UIView {
    
    // 프로토콜이 사용될수 있도록 연결
    var delegate: CustomKeyboardDelegate?

    @IBAction func BtnNum(_ sender: UIButton) {
        delegate?.KeyboardTapped(str: sender.titleLabel!.text!)
    }
}

'Swift' 카테고리의 다른 글

Floating Button  (0) 2021.02.13
table view  (0) 2021.02.13
StackView  (0) 2021.02.06
코드로 오브젝트 추가  (0) 2021.02.06
Button Inset  (0) 2021.02.05
Posted by khon98
,