【问题标题】:How to hide the letters on a .numberPad keyboard?如何隐藏 .numberPad 键盘上的字母?
【发布时间】:2019-12-06 04:59:55
【问题描述】:

默认情况下,当在 iPhone 上使用.numberPad 键盘时,数字键的每个键底部也有字母。

这些字母纯粹是装饰性的,用于帮助人们输入数字;但就我而言(输入商品数量),它们完全是多余的,甚至可能令人困惑。

是否可以将键盘配置为隐藏这些字母? 我应该实现自己的键盘视图来正确显示按键吗?

【问题讨论】:

    标签: ios iphone keyboard uikit


    【解决方案1】:

    我认为目前没有没有文本字符的“仅数字”键盘。

    但您可以创建自己的:

    textField.inputView = NumericKeyboard(target: textField)
    

    在哪里

    class DigitButton: UIButton {
        var digit: Int = 0
    }
    
    class NumericKeyboard: UIView {
        weak var target: UIKeyInput?
    
        var numericButtons: [DigitButton] = (0...9).map {
            let button = DigitButton(type: .system)
            button.digit = $0
            button.setTitle("\($0)", for: .normal)
            button.titleLabel?.font = UIFont.preferredFont(forTextStyle: .largeTitle)
            button.setTitleColor(.black, for: .normal)
            button.layer.borderWidth = 0.5
            button.layer.borderColor = UIColor.darkGray.cgColor
            button.accessibilityTraits = [.keyboardKey]
            button.addTarget(self, action: #selector(didTapDigitButton(_:)), for: .touchUpInside)
            return button
        }
    
        var deleteButton: UIButton = {
            let button = UIButton(type: .system)
            button.setTitle("⌫", for: .normal)
            button.titleLabel?.font = UIFont.preferredFont(forTextStyle: .largeTitle)
            button.setTitleColor(.black, for: .normal)
            button.layer.borderWidth = 0.5
            button.layer.borderColor = UIColor.darkGray.cgColor
            button.accessibilityTraits = [.keyboardKey]
            button.accessibilityLabel = "Delete"
            button.addTarget(self, action: #selector(didTapDeleteButton(_:)), for: .touchUpInside)
            return button
        }()
    
        init(target: UIKeyInput) {
            self.target = target
            super.init(frame: .zero)
            configure()
        }
    
        required init?(coder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    }
    
    // MARK: - Actions
    
    extension NumericKeyboard {
        @objc func didTapDigitButton(_ sender: DigitButton) {
            target?.insertText("\(sender.digit)")
        }
    
        @objc func didTapDeleteButton(_ sender: DigitButton) {
            target?.deleteBackward()
        }
    }
    
    // MARK: - Private initial configuration methods
    
    private extension NumericKeyboard {
        func configure() {
            autoresizingMask = [.flexibleWidth, .flexibleHeight]
            addButtons()
        }
    
        func addButtons() {
            let stackView = createStackView(axis: .vertical)
            stackView.frame = bounds
            stackView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
            addSubview(stackView)
    
            for row in 0 ..< 3 {
                let subStackView = createStackView(axis: .horizontal)
                stackView.addArrangedSubview(subStackView)
    
                for column in 0 ..< 3 {
                    subStackView.addArrangedSubview(numericButtons[row * 3 + column + 1])
                }
            }
    
            let subStackView = createStackView(axis: .horizontal)
            stackView.addArrangedSubview(subStackView)
    
            let blank = UIView()
            blank.layer.borderWidth = 0.5
            blank.layer.borderColor = UIColor.darkGray.cgColor
    
            subStackView.addArrangedSubview(blank)
            subStackView.addArrangedSubview(numericButtons[0])
            subStackView.addArrangedSubview(deleteButton)
        }
    
        func createStackView(axis: NSLayoutConstraint.Axis) -> UIStackView {
            let stackView = UIStackView()
            stackView.axis = axis
            stackView.alignment = .fill
            stackView.distribution = .fillEqually
            return stackView
        }
    }
    

    产生:

    显然,您可以发疯,自定义您的键盘以使其看起来像您想要的那样。以上是相当原始的,我只是冲撞在一起。但它说明了这个想法:创建自己的输入视图并使用UIKeyInput 协议将键盘输入传达给控件。

    【讨论】:

    • 感谢您的详尽回答!很遗憾,您必须制作自己的整个视图,但至少它看起来得到了 iOS 的良好支持。您能否评论一下这在可访问性方面做得如何?
    • 很好。您可以获得所有标准的免费可访问性内容。 (它甚至将“⌫”识别为“删除”,我对此感到惊讶。正如你所说,在可访问性方面,唯一让我感到震惊的是添加button.accessibilityTraits = [.keyboardKey],(例如,启用“口语”内容”»“朗读屏幕”也可以朗读键盘键)。但无论如何,标准的 VoiceOver 都可以。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 2013-09-17
    • 2011-04-28
    • 2020-10-12
    • 2012-04-19
    • 2011-10-26
    • 1970-01-01
    相关资源
    最近更新 更多