IOS 13 पर डिफ़ॉल्ट रूप से सिस्टम इमोजी कीबोर्ड दिखा रहा है


17

समाधान

यहाँ इस मुद्दे के लिए एक पूर्ण समाधान / कार्य है , कृपया वोट ब्लाल्ड के उत्तर को भी ध्यान में रखें क्योंकि यह आवश्यक जानकारी का महत्वपूर्ण हिस्सा था!

वैकल्पिक शीर्षक खोज की सहायता के लिए

  • UIKeyInput ऑब्जेक्ट के लिए डिफ़ॉल्ट रूप में इमोजी कीबोर्ड दिखाना (iOS 13 में)
  • आईओएस 13 को इमोजी कीबोर्ड दिखाने के लिए मजबूर करें
  • UITextInputMode.primaryLanguageइमोजी की स्थापना
  • प्रोग्राम को कीबोर्ड से इमोजी पर सेट करें

से पहले उस समान "इमोजी" के UITextInputModeसाथ वापस primaryLanguage इमोजी कीबोर्ड दिखाने के लिए डिफ़ॉल्ट होगा (नीचे चित्र देखें)।

इमोजी कीबोर्ड स्क्रीन शॉट

"इमोजी" को वापस करने के लिए उदाहरण कोड UITextInputMode

//
//  ViewController.swift
//  Keyboard Info
//
//  Created by Richard Stelling on 30/09/2019.
//  Copyright © 2019 Richard Stelling. All rights reserved.
//

import UIKit

class TestButton: UIButton, UIKeyInput {

    var hasText: Bool = true

    func insertText(_ text: String) { print("\(text)") }

    func deleteBackward() {}


    override var canBecomeFirstResponder: Bool { return true }

    override var canResignFirstResponder: Bool { return true }

    override var textInputMode: UITextInputMode? {
        for mode in UITextInputMode.activeInputModes {
            if mode.primaryLanguage == "emoji" {
                return mode
            }
        }
        return nil
    }
}

IOS 12 पर इस कोड को चलाने से कीबोर्ड इमोजी कीबोर्ड पर सेट हो जाएगा, लेकिन iOS 13 पर इसका कोई प्रभाव नहीं है।

क्या यह कोई ज्ञात त्रुटि है? क्या आसपास कोई काम है?

अपडेट

  • @Navillus द्वारा अनुरोध किया गया , "सक्रिय इनपुट मोड" की पूरी सूची है; "एन-जीबी", "इमोजी"
  • पर परीक्षण किया और पुष्टि की; 13.0, 13.1, 13.1.1, 13.1.2 और 13.2 (बीज 1)

मजेदार बात: मैं इस कोड को सिम्युलेटर पर सफलतापूर्वक चलाने में सक्षम था, लेकिन डिवाइस पर नहीं। दोनों के लिए iOS 13। अब मैं अंतर्ध्यान हो गया हूं।
मरीना एगुइलर

एक सिम्युलेटर में भी मेरे लिए काम किया। @rjstelling आपके डिवाइस पर सक्रियInputModes की पूरी सूची क्या है? आप इसके साथ जांच कर सकते हैं: प्रिंट (UITextInputMode.activeInputModes.map ({(m) -> बदले में स्ट्रिंग m.primaryLanguage ?? ""}))
Navillus

@Navillus - सवाल का जवाब, इसके "एन-जीबी" और "इमोजी"
rjstelling

1
यह अब iOS 13.4 / Xcode 11.4
स्टीफन

जवाबों:


9

मैंने iOS 13 के लिए इस पर एक रडार दर्ज किया क्योंकि मेरे पास एक द्विभाषी जापानी / अंग्रेजी ऐप है। कुछ क्षेत्र जापानी और कुछ अंग्रेजी हैं, तो जाहिर है कि यह उपयोगकर्ता को सही कीबोर्ड प्रकार पेश करने के बजाय उन्हें 20 बार आगे और पीछे फ्लिप करने के लिए समझ में आता है।

इसके लिए एक समाधान था, और वह यह था कि UIKit 'textInputMode' कॉल के बाद, मुख्य सूत्र में आप ऐसा कर सकते हैं:

// has to be done after the textInputMode method is called
if #available(iOS 13, *) {
    textField.keyboardType = textField.keyboardType
} 

यह उस कीबोर्ड को फिर से लोड करने के लिए मजबूर करता है, जब आप चाहते हैं कि TextInputMode के साथ उत्तर देने के बाद। मैंने उन्हें बग, और सही व्यवहार प्राप्त करने के लिए वर्कअराउंड की जानकारी दी।

इसलिए iOS 13.1 में बग को ठीक नहीं किया गया, हालांकि उन्होंने मेरे वर्कअराउंड को ब्लॉक कर दिया।

अच्छा लगा। मैं उन्हें फिर से किसी भी कीड़े रिपोर्ट नहीं करेंगे। बल्कि अगर मुझे कोई वर्कअराउंड मिलता है तो मैं इसका इस्तेमाल करूंगा।

तो ऐसा लगता है कि वे अब चुपचाप इस सुविधा को अक्षम कर रहे हैं। और यह एक विशेषता है, यह वस्तुतः इस विधि कॉल का उद्देश्य है, यह पता लगाने के लिए कि उपयोगकर्ता को क्या इनपुट मोड प्रस्तुत किया जाना चाहिए।

यह अभी भी ठीक काम करता है, अगर आपके पास एक और भाषा है और अंग्रेजी का चयन करना चाहते हैं।

इसलिए यदि मेरा उपयोगकर्ता कीबोर्ड चयन के रूप में जापानी सेट करता है तो मैं एक अंग्रेजी कीबोर्ड को मजबूर कर सकता हूं। सिर्फ दूसरे तरीके से नहीं। जापानी इनपुट मोड प्राप्त करने का कोई भी प्रयास अंग्रेजी कीबोर्ड में समाप्त होता है।

संपादित करें:

एक और रास्ता है जो आप इसके आसपास काम कर सकते हैं, लेकिन इसमें आंतरिक एपीआई की खोज और उपयोग शामिल है जो सीधा नहीं है। आपको ग्लोब बटन को हिट करने के परिणामों को प्रबंधित करने के लिए उपयोग किए जाने वाले कार्यों को अनिवार्य रूप से ढूंढना होगा। यदि आप ऐसा करते हैं, तो आप अनिवार्य रूप से उपयोगकर्ता के नलों का अनुकरण कर रहे हैं और इसके व्यापक प्रभाव हैं, अर्थात, अन्य ऐप्स के लिए भी कीबोर्ड बदला जाएगा। तो यह अनुशंसित नहीं है, 100% यह ऐप स्टोर जमा करने में विफल हो जाएगा। मैं अपने अंतिम वर्कअराउंड के परिणामों के कारण इसे पोस्ट नहीं करना चाहता।

मुझे लगता है कि Apple को बहुत आसानी से समझना संभव नहीं है। मुझे केवल इतना पता है कि:

  1. एपीआई प्रकाशित के रूप में कार्य नहीं कर रहा है
  2. यह बताया गया था और उन्होंने बग को ठीक नहीं किया
  3. रिपोर्टिंग के समय के बाद से वे जानबूझकर टूट गए (जानबूझकर या नहीं)

इसलिए जब तक उनके इरादे स्पष्ट नहीं हो जाते और / या वे इस बग को ठीक कर लेते हैं (जो कि उन्हें करना चाहिए) तब तक भविष्य के कार्यपत्रकों को जमा किया जाना चाहिए। बस परिवर्तन प्रकाशित किए बिना एपीआई का हिस्सा रद्द करना एक प्रमुख बग है।


इसके लिए धन्यवाद! इसने मुझे इसे थोड़ा और समझने में मदद की है। मुझे संदेह है कि उन्होंने जानबूझकर आपके वर्कअराउंड को अवरुद्ध कर दिया है, यह मुझे एक बग की तरह लगता है। अगर वे चाहते थे कि वे इस सुविधा को हटा दें तो वे इसे हटा सकते थे।
rjstelling 8

"कभी भी दुर्भावना के लिए विशेषता नहीं है जो कि मूर्खता द्वारा पर्याप्त रूप से समझाया गया है।"
rjstelling 8

क्या किसी ने इसके लिए एक और समाधान पाया है?
शुजात

8

NB: सुनिश्चित करें कि आपके पास इमोजी कीबोर्ड सक्षम है।

यह एक iOS 13 बग प्रतीत होता है, उपकरणों के लिए चारों ओर काम (यह सिम्युलेटर को प्रभावित नहीं करता है) textInputContextIdentifierसंपत्ति को ओवरराइड करने और गैर-शून्य मान वापस करने के लिए है।

//
//  ViewController.swift
//  Keyboard Info
//
//  Created by Richard Stelling on 30/09/2019.
//  Copyright © 2019 Richard Stelling. All rights reserved.
//

import UIKit

class TestButton: UIButton, UIKeyInput {

    var hasText: Bool = true

    override var textInputContextIdentifier: String? { "" } // return non-nil to show the Emoji keyboard ¯\_(ツ)_/¯ 

    func insertText(_ text: String) { print("\(text)") }

    func deleteBackward() {}

    override var canBecomeFirstResponder: Bool { return true }

    override var canResignFirstResponder: Bool { return true }

    override var textInputMode: UITextInputMode? {
        for mode in UITextInputMode.activeInputModes {
            if mode.primaryLanguage == "emoji" {
                return mode
            }
        }
        return nil
    }
}

उसके जवाब के लिए ब्लर को धन्यवाद ।


1
मुझे अंग्रेजी दशमलव पैड दिखाने में एक ही प्रकार की समस्या आ रही है। मेरे ऐप की भाषा अरबी में है और मैं चाहता हूं कि मेरा पाठ क्षेत्र अंग्रेजी दशमलव पैड को दिखाए। मैंने इन चरणों और विधियों को ओवरराइड करके उपर्युक्त चरण किए हैं। TextInputMode में, मैं केवल "en-US" मोड लौटाता हूं, लेकिन फिर भी यह iOS 13 में अरबी दशमलव पैड दिखाता है
shujaat

IOS 13.2 पर मेरे लिए काम नहीं करता है
atereshkov

मैं इस बात की पुष्टि कर सकता हूं कि यह iOS 13.2 के लिए अब काम नहीं करता है ...
Jay Lee

@JayLee सुनिश्चित करें कि आपके पास इमोजी कीबोर्ड सक्षम है
rjstelling

7

आपको textinputcontextidentifierटेक्स्टफ़िल्ड पर सेट करना होगा ताकि iOS को पता चल सके कि कस्टम को कहाँ सहेजना हैtextInputMode

यह डॉक्टर में नहीं लिखा है, लेकिन यह काम करता है।

रेफरी: https://developer.apple.com/documentation/uikit/uiresponder/1621091-textinputcontextidentifier


2
यह आईओएस 13. बस पर मेरे लिए काम किया लौटने "emoji"या ""के लिए textInputContextIdentifierअपने कस्टम में UITextFieldशो इमोजी कीबोर्ड (जब साथ संयुक्त textInputModeप्रश्न में ओवरराइड)। छिपे हुए डॉक्स पर टिप के लिए धन्यवाद। 👍
बाजा207

जब हम ऐप का स्थानीयकरण अरबी में करते हैं, तब हम तब काम नहीं करते हैं जब हम किसी UITextField के लिए अंग्रेजी दशमलव पैड लागू करना चाहते हैं।
शुजात
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.