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 |