डिफ़ॉल्ट रूप से, iPhone पर .numberPad कीबोर्ड का उपयोग करते समय, संख्या कुंजियों में प्रत्येक कुंजी के नीचे अक्षर भी होते हैं।

enter image description here

संख्या इनपुट वाले लोगों की सहायता के लिए पत्र विशुद्ध रूप से कॉस्मेटिक हैं; लेकिन मेरे मामले में (आइटम मात्रा दर्ज करना), वे पूरी तरह से अनावश्यक हैं, शायद भ्रमित भी।

क्या इन अक्षरों को छिपाने के लिए कीबोर्ड को कॉन्फ़िगर करना संभव है? क्या मुझे केवल कुंजियों को ठीक से प्रस्तुत करने के लिए अपना स्वयं का कीबोर्ड दृश्य लागू करना चाहिए?

3
Cykelero 28 जुलाई 2019, 21:40

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
    }
}

वह उपज:

enter image description here

जाहिर है, आप पागल हो सकते हैं, अपने कीबोर्ड को अनुकूलित करने के लिए जैसा आप चाहते हैं। उपरोक्त काफी आदिम है, कुछ ऐसा जो मैंने अभी एक साथ धराशायी किया है। लेकिन यह इस विचार को स्पष्ट करता है: अपने आप को इनपुट दृश्य बनाएं और नियंत्रण में कीबोर्ड इनपुट को संप्रेषित करने के लिए UIKeyInput प्रोटोकॉल का उपयोग करें।

1
Rob 29 जुलाई 2019, 21:26