İOS 13'te sistem Emoji klavyesini varsayılan olarak gösterme


17

Çözüm

İşte bu sorun için tam bir çözüm / çözüm , lütfen oylayın Blld's cevabını da çünkü bu gerekli bilgi için hayati önem taşıyordu!

Aramaya yardımcı olacak alternatif başlıklar

  • Emoji klavyesini bir UIKeyInput nesnesi için varsayılan olarak gösterme (iOS 13'te)
  • İOS 13'ü Emoji klavyesini göstermeye zorlama
  • ayarlamak UITextInputMode.primaryLanguage emoji'ye
  • Klavyeyi programlı olarak emoji'ye ayarlayın

önce UITextInputMode, primaryLanguagebu eşit "emoji" ile geri dönmek, Emoji Klavyesini göstermektir (aşağıdaki resme bakın).

Emoji klavye ekran görüntüsü

"Emoji" yi döndürmek için örnek kod 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
    }
}

Bu kodu iOS 12'de çalıştırmak, klavyeyi sistem Emoji Klavyesine ayarlayacaktır, ancak iOS 13'te hiçbir etkisi yoktur.

Bu bilinen bir hata mı? Bir çözüm var mı?

Güncellemeler

  • @Navillus tarafından talep edilen "aktif giriş modları" nın tam listesi; "en-GB", "emoji"
  • Üzerinde test edildi ve onaylandı; 13.0, 13.1, 13.1.1, 13.1.2 ve 13.2 (tohum 1)

Komik şey: Bu kodu simülatörde başarıyla çalıştırabildim, ancak cihazda çalışamadım. Her ikisi için iOS 13. Şimdi meraklandım.
Marina Aguilar

Benim için de bir simülatörde çalıştı. @rjstelling Cihazınızdaki activeInputModes'un tam listesi nedir? Bununla kontrol edebilirsiniz: print (UITextInputMode.activeInputModes.map ({(m) -> Buna karşılık dize m.primaryLanguage ?? ""}))
Navillus

@Navillus - sorunun cevabı, "en-GB" ve "emoji"
rjstelling

1
Bu, iOS 13.4 / Xcode 11.4
Stephen

Yanıtlar:


9

İki dilli bir Japonca / İngilizce uygulamam olduğu için iOS 13 için bir radar hazırladım. Bazı alanlar Japonca ve bazı İngilizce'dir, bu yüzden 20 kez ileri geri çevirmek yerine kullanıcıya doğru klavye türünü sunmak mantıklıdır.

Bunun için bir geçici çözüm vardı ve UIKit 'textInputMode' çağırdıktan sonra ana iş parçacığında bunu yapabilirsiniz:

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

Bu, istediğiniz textInputMode ile yanıtladıktan sonra klavyeyi yeniden yüklemeye zorlar. Onlara hata ve doğru davranış elde etmek için geçici çözüm hakkında bilgi verdim.

İOS 13.1'de hata düzeltilmedi, ancak geçici çözümümü engellediler.

Güzel. Onlara herhangi bir hata bildirmeyeceğim. Bunun yerine bir çözüm bulursam onu ​​kullanacağım.

Görünüşe göre şimdi bu özelliği sessizce devre dışı bırakıyorlar. Ve bu bir özelliktir, kullanıcıya tam olarak hangi giriş modunun sunulması gerektiğini bulmak için bu yöntem çağrısının amacı budur.

Bu hala Tamam çalışan başka bir dile sahip ve İngilizce seçmek istiyorsanız ama.

Kullanıcım Japonca'yı klavye seçimi olarak ayarlarsa, İngilizce klavyeyi zorlayabilirim. Tam tersi değil. Japonca giriş moduna geçme girişimleri İngilizce klavyeyle sonuçlanır.

DÜZENLE:

Bu sorunu çözebileceğiniz başka bir yol daha vardır, ancak bu basit olmayan dahili API'nin keşfini ve kullanımını içerir. Esasen dünya düğmesine basmanın sonuçlarını yönetmek için kullanılan işlevleri bulmanız gerekir. Bunu yaparsanız, esas olarak kullanıcının musluklarını simüle edersiniz ve çok çeşitli efektleri vardır, yani klavye diğer uygulamalar için de değiştirilecektir. Bu yüzden tavsiye edilmez,% 100 App Store gönderimi başarısız olur. Son geçici çözümümün sonuçları nedeniyle göndermek istemiyorum.

Bence Apple'ı çok kolay anlamak mümkün değil. Tek bildiğim şu:

  1. API yayınlandığı gibi çalışmıyor
  2. rapor edildi ve hatayı düzeltmediler
  3. Raporlama zamanından bu yana geçici çözümü (kasıtlı olarak veya değil)

Bu nedenle gelecekteki geçici çözümler, niyetleri netleşene ve / veya bu hatayı düzeltene kadar yapılmalıdır (ne yapmaları gerektiği). Değişikliği yayınlamadan API'nın bir kısmını iptal etmek önemli bir hatadır.


Bunun için teşekkürler! Bunu biraz daha anlamama yardımcı oldu. Ben geçici olarak sizin geçici engellendi şüpheliyim, bu bana bir hata gibi geliyor. Özelliği kaldırmak istedikleri takdirde kullanımdan kaldırılabilirler.
rjstelling

"Asla aptallıkla yeterince açıklanmış olan kötülüklere atfetmeyin."
rjstelling

Bunun için başka bir çözüm bulan var mı?
shujaat

8

Not: Emoji klavyesinin etkin olduğundan emin olun.

Bu bir iOS 13 hatası gibi görünüyor, etraftaki çalışma (cihazlar için bu Simülatörü etkilemez) textInputContextIdentifierözelliği geçersiz kılmak ve sıfır olmayan bir değer döndürmektir.

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

Blld'a cevabı için teşekkürler .


1
İngilizce ondalık yastık gösteren sorunu aynı tür yaşıyorum. Uygulamamın dili Arapça ve metin alanımın İngilizce ondalık tuş takımını göstermesini istiyorum. Yukarıda belirtilen adımları bu değişkenleri ve yöntemleri geçersiz kılarak yaptım. TextInputMode içinde, yalnızca "en-US" moduna dönüyorum, ancak yine de iOS 13'te arapça ondalık tuş takımı gösteriyor.
Shujaat


Bunun artık iOS 13.2 için işe yaramadığını doğrulayabilirim ...
Jay Lee

@JayLee Emoji klavyesinin etkin olduğundan emin olun
rjstelling

7

textinputcontextidentifierİOS'un özel öğeyi nereye kaydedeceğini bilmesi için textField üzerinde ayarlamanız gerekirtextInputMode

Dokümanda yazılmadı ama işe yarıyor.

ref: https://developer.apple.com/documentation/uikit/uiresponder/1621091-textinputcontextidentifier


2
Bu dönen iOS 13. Just benim için çalıştı "emoji"ya ""için textInputContextIdentifierbenim özel içinde UITextField(birleştirildiğinde gösterileri Emoji klavyeyi textInputModesöz konusu geçersiz kılma). Gizli dokümanlar için bahşiş için teşekkürler. 👍
Baza207

Uygulamanın yerelleştirmesi Arapça olduğunda UITextField için İngilizce ondalık tuş takımını zorunlu kılmak istediğimizde çalışmaz.
shujaat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.