UIButton에서 toolbar가있는 키보드를 내고 싶습니다.
UIButton을 누르면 키보드가 나올 수 있습니다.
UItextFiled라면
inputAccessoryView
에 넣고 싶은 툴바를 넣으면 좋다는 것이었지만, UIButton을 확장했을 경우 조금 막혔으므로 메모오른쪽 하단의 빨간색 버튼을 누르면
툴바가있는 키보드가 나오기를 원합니다.
해결책
이 클래스를 사용한 버튼이면 누르면 키보드가 나오게 되어 있습니다
class RespondingButton: UIButton, UIKeyInput {
override var canBecomeFirstResponder: Bool {
return true
}
let toolbar :UIToolbar = {
let toolbar = UIToolbar()
let flexibleItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: nil, action: nil)
let okButton: UIBarButtonItem = UIBarButtonItem(title: "OK", style: UIBarButtonItem.Style.plain, target: self, action: #selector(TargetListViewController.openLeftMenu))
let cancelButton: UIBarButtonItem = UIBarButtonItem(title: "CANCEL", style: UIBarButtonItem.Style.plain, target: self, action: #selector(TargetListViewController.openLeftMenu))
// アイテムを配置
toolbar.setItems([flexibleItem, okButton, flexibleItem, cancelButton, flexibleItem], animated: true)
// ツールバーのサイズを指定
toolbar.sizeToFit()
return toolbar
}()
//private let accessoryView = UIView()
override var inputAccessoryView: UIView {
return self.toolbar
}
var hasText: Bool = true
func insertText(_ text: String) {}
func deleteBackward() {}
}
조사의 경위
【Swift4】 키보드 위에 UIToolbar를 구현하는 방법
여기를 참조하여
inputAccessoryView
에 toolbar
다Apple 문서 확인
Apple inputAccessoryView
여기 참조
받는 사람이 첫 번째 응답자가 될 때 표시되는 사용자 지정 입력 액세서리 보기
UIButton 클래스의 부모 클래스는
inputAccessoryView
를 상속하므로 UIResponder
하지만button.inputAccessoryView = toolbar
에러를 내뿜는다.
설명을 잘 읽으면
This property is typically used to attach an accessory view to the system-supplied keyboard
that is presented for UITextField and UITextView objects.
The value of this read-only property is nil.
If you want to attach custom controls to a system-supplied input view
(such as the system keyboard) or to a custom input view (one you provide in the inputView property), redeclare this property as read-write in a UIResponder subclass.
You can then use this property to manage a custom accessory view.
When the receiver becomes the first responder, the responder infrastructure attaches the accessory view to the appropriate input view before displaying it.
즉 이 속성은 read-only property
커스텀 입력 뷰로 사용한다면 이 프로퍼티를 UIResponder 서브 클래스의 읽고 쓰기 가능으로서 재선언해라라는 것이었습니다
재선언··?
재선언 방법을 알아보기
이 문서를 참고로했습니다.
How do I redeclare a property as read-write in UIResponder subclass with swift?
이런 식으로 하면 좋겠다는 것을 알았다
private let accessoryView = AccessoryView()
class MessagesViewController : UIViewController {
override var inputAccessoryView: AccessoryView {
return accessoryView
}
}
우선 확장 된 UIButton 클래스에 넣고 싶은 툴바를 만들고,
inputAccessoryView
참고문헌
【Swift4】 키보드 위에 UIToolbar를 구현하는 방법
How do I redeclare a property as read-write in UIResponder subclass with swift?
Reference
이 문제에 관하여(UIButton에서 toolbar가있는 키보드를 내고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nakagawa1017/items/27c02118875150e7fcff
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(UIButton에서 toolbar가있는 키보드를 내고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nakagawa1017/items/27c02118875150e7fcff텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)