해결책
이 문제에 대한 완전한 해결책 / 해결 방법 은 다음과 같습니다. 투표해야 할 정보가 매우 중요하기 때문에 Blld의 답변 을 투표하십시오 !
검색을 돕기위한 대체 제목
- UIKeyInput 객체의 기본으로 이모티콘 키보드 표시 (iOS 13)
- iOS 13으로 이모티콘 키보드 표시
UITextInputMode.primaryLanguage
이모티콘으로 설정- 프로그래밍 방식으로 키보드를 이모티콘으로 설정
ios13 이전에 동일한 “이모 지” 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가 요청한 “활성 입력 모드”의 전체 목록은 다음과 같습니다. “en-GB”, “이모티콘”
- 테스트 및 확인; 13.0, 13.1, 13.1.1, 13.1.2 및 13.2 (시드 1)
답변
이중 언어 일본어 / 영어 앱이 있기 때문에 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 제출에 실패합니다. 마지막 해결 방법의 결과로 게시하고 싶지 않습니다.
애플을 아주 쉽게 이해하는 것은 불가능하다고 생각합니다. 내가 아는 것은 :
- API가 게시 된대로 작동하지 않습니다
- 보고되었으며 버그를 수정하지 않았습니다.
- 보고 당시부터는 (의도적으로 또는 해결되지 않은) 해결 방법을 깨뜨 렸습니다.
따라서 미래의 해결 방법은 의도가 명확해질 때까지 보관해야하며 버그를 수정해야합니다. 변경 사항을 게시하지 않고 API의 일부를 취소하는 것은 큰 버그입니다.
답변
주의 : 이모티콘 키보드가 활성화되어 있는지 확인하십시오.
이것은 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 감사합니다 .
답변
textinputcontextidentifier
iOS가 사용자 정의를 저장할 위치를 알 수 있도록 textField 를 설정해야합니다.textInputMode
그것은 문서에 쓰여 있지 않지만 작동합니다.
참조 : https://developer.apple.com/documentation/uikit/uiresponder/1621091-textinputcontextidentifier