iOS 13에서 기본적으로 시스템 이모티콘 키보드 표시


17

해결책

이 문제에 대한 완전한 해결책 / 해결 방법 은 다음과 같습니다. 투표해야 할 정보가 매우 중요하기 때문에 Blld의 답변 을 투표하십시오 !

검색을 돕기위한 대체 제목

  • UIKeyInput 객체의 기본으로 이모티콘 키보드 표시 (iOS 13)
  • iOS 13으로 이모티콘 키보드 표시
  • UITextInputMode.primaryLanguage이모티콘으로 설정
  • 프로그래밍 방식으로 키보드를 이모티콘으로 설정

이전에 동일한 "이모 지" UITextInputModeprimaryLanguage를 반환하면 기본적으로 이모 지 키보드가 표시됩니다 (아래 이미지 참조).

이모티콘 키보드 스크린 샷

은 "이모티콘"을 반환하는 예제 코드 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가 요청한 "활성 입력 모드"의 전체 목록은 다음과 같습니다. "en-GB", "이모티콘"
  • 테스트 및 확인; 13.0, 13.1, 13.1.1, 13.1.2 및 13.2 (시드 1)

재미있는 것 : 시뮬레이터 에서이 코드를 성공적으로 실행할 수 있었지만 장치에서는 실행할 수 없었습니다. 둘 다 iOS 13 이제 나는 흥미 롭다.
마리나 귈라

시뮬레이터에서도 나를 위해 일했습니다. @rjstelling 장치에서 activeInputModes의 전체 목록은 무엇입니까? 이것을 확인할 수 있습니다 : print (UITextInputMode.activeInputModes.map ({(m)-> 반환 문자열 m.primaryLanguage ?? ""}))
Navillus

@Navillus-질문에 대한 답변, "en-GB"및 "emoji"
rjstelling

1
이것은 이제 iOS 13.4 / Xcode 11.4
Stephen

답변:


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에서는 버그가 수정되지 않았지만 해결 방법을 차단했습니다.

좋은. 다시 버그를보고하지 않습니다. 해결 방법을 찾으면 그냥 사용하십시오.

따라서 현재이 기능을 자동으로 사용 중지 한 것 같습니다. 그리고 이것은 사용자에게 어떤 입력 모드를 제시해야 하는지를 알아내는 기능입니다.

그것은 아직 확인 작동 다른 언어가 영어를 선택하려면 생각합니다.

따라서 사용자가 키보드 선택으로 일본어를 설정하면 영어 키보드를 강제 실행할 수 있습니다. 다른 방법은 아닙니다. 일본어 입력 모드를 얻으려는 시도는 영어 키보드로 끝납니다.

편집하다:

이 문제를 해결할 수있는 또 다른 경로가 있지만 간단하지 않은 내부 API의 발견 및 사용과 관련이 있습니다. 지구본 버튼을 누르면 결과를 관리하는 데 사용되는 기능을 반드시 찾아야합니다. 그렇게하면 본질적으로 사용자의 탭을 시뮬레이트하고 광범위한 효과가 있습니다. 즉, 다른 앱에서도 키보드가 변경됩니다. 따라서 100 %는 App Store 제출에 실패합니다. 마지막 해결 방법의 결과로 게시하고 싶지 않습니다.

애플을 아주 쉽게 이해하는 것은 불가능하다고 생각합니다. 내가 아는 것은 :

  1. API가 게시 된대로 작동하지 않습니다
  2. 보고되었으며 버그를 수정하지 않았습니다.
  3. 보고 당시부터는 (의도적으로 또는 해결되지 않은) 해결 방법을 깨뜨 렸습니다.

따라서 미래의 해결 방법은 의도가 명확해질 때까지 보관해야하며 버그를 수정해야합니다. 변경 사항을 게시하지 않고 API의 일부를 취소하는 것은 큰 버그입니다.


감사합니다! 그것은 이것을 조금 더 이해하는 데 도움이되었습니다. 그들이 의도적으로 해결 방법을 차단했는지 의심 스럽습니다. 이것은 나에게 버그 인 것 같습니다. 그들이 기능을 제거하고 싶었다면 더 이상 사용되지 않을 수 있습니다.
rjstelling

"어리 석음으로 적절하게 설명 된 것을 악의로 생각하지 마십시오."
rjstelling

아무도 이것에 대한 다른 해결 방법을 찾았습니까?
shujaat

8

주의 : 이모티콘 키보드가 활성화되어 있는지 확인하십시오.

이것은 iOS 13 버그 인 것으로 보입니다. 해결 방법 (장치의 경우 시뮬레이터에 영향을 미치지 않음)은 textInputContextIdentifier속성 을 재정의하고 0이 아닌 값을 반환하는 것입니다.

//
//  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 감사합니다 .


1
영어 십진수 패드를 표시하는 데 동일한 유형의 문제가 있습니다. 내 앱의 언어가 아랍어이며 텍스트 필드에 영어 십진수 패드를 표시하려고합니다. 이러한 변수와 메서드를 재정 의하여 위에서 언급 한 단계를 수행했습니다. textInputMode에서는 "en-US"모드 만 반환하지만 iOS 13에서는 아랍어 10 진수 패드를 보여줍니다.
shujaat

아이폰 OS 13.2에 나를 위해 작동하지 않습니다
atereshkov

iOS 13.2에서는 더 이상 작동하지 않는 것 같습니다.
Jay Lee

확인 @JayLee 당신은 이모티콘 키보드가 활성화되어
rjstelling

7

textinputcontextidentifieriOS가 사용자 정의를 저장할 위치를 알 수 있도록 textField 를 설정해야합니다.textInputMode

그것은 문서에 쓰여 있지 않지만 작동합니다.

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


2
이것은 반환 아이폰 OS (13) 그냥 나를 위해 일한 "emoji"""에 대한 textInputContextIdentifier나의 정의에 UITextField합니다 (과 결합 될 때 쇼 이모티콘 키보드 textInputMode질문에 오버라이드). 숨겨진 문서에 대한 팁을 주셔서 감사합니다. 👍
Baza207

앱의 현지화가 아랍어 인 경우 UITextField에 영어 십진수 패드를 적용하려고 할 때 작동하지 않습니다.
shujaat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.