UIButton에서 toolbar가있는 키보드를 내고 싶습니다.

9056 단어 iOSUIKitSwift
이 계속
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를 구현하는 방법
여기를 참조하여 inputAccessoryViewtoolbar

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?

좋은 웹페이지 즐겨찾기