В моем приложении мне нужно настраивать текстовый ввод, для которого я использую Uiview, который соответствует uikeyinput. Затем это обернуто в UiviewResentable для использования с Swiftui. Я хотел бы заставить Swiftui добавить меню клавиатуры, когда выбрано мое представление, но не смог этого сделать. (Использование пользовательского текстового представления от chackingwithswift.com в качестве противостояния для моего фактического варианта использования.) Приложение включает в себя текстовое поле - когда оно активно, добавляется системная панель инструментов, а также пользовательскую панель инструментов. Тем не менее, на панели инструментов показаны две кнопки - та, которую я намеревался для текстового поля, а также та, которую я намеревал для своего пользовательского представления. Когда мой пользовательский вид активируется, панели инструментов не добавляются. В основном, я после получения пользовательской панели инструментов (с синими кнопками). /> ContentView: < /p>
import SwiftUI
enum LocFields {
case textField
case myTextView
}
struct ContentView: View {
@State private var tfText = ""
@State private var isEditingTvText = false
@FocusState private var focusedField: LocFields?
var body: some View {
VStack {
TextField("Enter text", text: $tfText)
.textFieldStyle(.roundedBorder)
.focused($focusedField, equals: .textField)
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
Button("Tap me 1!") {
print("Tapped 1")
}
}
}
TextView(isEditing: isEditingTvText)
.background(Color.gray.opacity(0.2))
.focused($focusedField, equals: .myTextView)
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
Button("Tap me 2!") {
print("Tapped 2")
}
}
}
.onTapGesture {
isEditingTvText.toggle()
}
}
.padding()
.onChange(of: focusedField) { _, newValue in
switch newValue {
case .textField:
isEditingTvText = false
case .myTextView:
break
default: // Set to nil case
isEditingTvText = false
}
}
}
}
< /code>
textView: < /p>
import SwiftUI
struct TextView: UIViewRepresentable {
var isEditing: Bool
// NOTE: TextRenderingView from:
// https://www.hackingwithswift.com/exampl ... uikeyinput
func makeUIView(context: Context) -> TextRenderingView {
let vw = TextRenderingView()
vw.backgroundColor = .clear
return vw
}
func updateUIView(_ uiView: TextRenderingView, context: Context) {
let uiViewIsFirst = uiView.isFirstResponder
if isEditing {
if !uiViewIsFirst {
DispatchQueue.main.async {
uiView.becomeFirstResponder()
}
}
} else {
if uiViewIsFirst {
DispatchQueue.main.async {
uiView.resignFirstResponder()
}
}
}
}
}
< /code>
textrenderingView: < /p>
import UIKit
// From: https://www.hackingwithswift.com/exampl ... uikeyinput
class TextRenderingView: UIView, UIKeyInput {
// the string we'll be drawing
var input = ""
override var canBecomeFirstResponder: Bool {
true
}
var hasText: Bool {
input.isEmpty == false
}
func insertText(_ text: String) {
input += text
setNeedsDisplay()
}
func deleteBackward() {
_ = input.popLast()
setNeedsDisplay()
}
override func draw(_ rect: CGRect) {
let attrs: [NSAttributedString.Key: Any] = [.font: UIFont.systemFont(ofSize: 32)]
let attributedString = NSAttributedString(string: input, attributes: attrs)
attributedString.draw(in: rect)
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... ses-uikeyi
Как получить панель инструментов для клавиатуры Swift ⇐ IOS
Программируем под IOS
-
Anonymous
1749576460
Anonymous
В моем приложении мне нужно настраивать текстовый ввод, для которого я использую Uiview, который соответствует uikeyinput. Затем это обернуто в UiviewResentable для использования с Swiftui. Я хотел бы заставить Swiftui добавить меню клавиатуры, когда выбрано мое представление, но не смог этого сделать. (Использование пользовательского текстового представления от chackingwithswift.com в качестве противостояния для моего фактического варианта использования.) Приложение включает в себя текстовое поле - когда оно активно, добавляется системная панель инструментов, а также пользовательскую панель инструментов. Тем не менее, на панели инструментов показаны две кнопки - та, которую я намеревался для текстового поля, а также та, которую я намеревал для своего пользовательского представления. Когда мой пользовательский вид активируется, панели инструментов не добавляются. В основном, я после получения пользовательской панели инструментов (с синими кнопками). /> ContentView: < /p>
import SwiftUI
enum LocFields {
case textField
case myTextView
}
struct ContentView: View {
@State private var tfText = ""
@State private var isEditingTvText = false
@FocusState private var focusedField: LocFields?
var body: some View {
VStack {
TextField("Enter text", text: $tfText)
.textFieldStyle(.roundedBorder)
.focused($focusedField, equals: .textField)
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
Button("Tap me 1!") {
print("Tapped 1")
}
}
}
TextView(isEditing: isEditingTvText)
.background(Color.gray.opacity(0.2))
.focused($focusedField, equals: .myTextView)
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
Button("Tap me 2!") {
print("Tapped 2")
}
}
}
.onTapGesture {
isEditingTvText.toggle()
}
}
.padding()
.onChange(of: focusedField) { _, newValue in
switch newValue {
case .textField:
isEditingTvText = false
case .myTextView:
break
default: // Set to nil case
isEditingTvText = false
}
}
}
}
< /code>
textView: < /p>
import SwiftUI
struct TextView: UIViewRepresentable {
var isEditing: Bool
// NOTE: TextRenderingView from:
// https://www.hackingwithswift.com/example-code/uikit/how-to-create-custom-text-input-using-uikeyinput
func makeUIView(context: Context) -> TextRenderingView {
let vw = TextRenderingView()
vw.backgroundColor = .clear
return vw
}
func updateUIView(_ uiView: TextRenderingView, context: Context) {
let uiViewIsFirst = uiView.isFirstResponder
if isEditing {
if !uiViewIsFirst {
DispatchQueue.main.async {
uiView.becomeFirstResponder()
}
}
} else {
if uiViewIsFirst {
DispatchQueue.main.async {
uiView.resignFirstResponder()
}
}
}
}
}
< /code>
textrenderingView: < /p>
import UIKit
// From: https://www.hackingwithswift.com/example-code/uikit/how-to-create-custom-text-input-using-uikeyinput
class TextRenderingView: UIView, UIKeyInput {
// the string we'll be drawing
var input = ""
override var canBecomeFirstResponder: Bool {
true
}
var hasText: Bool {
input.isEmpty == false
}
func insertText(_ text: String) {
input += text
setNeedsDisplay()
}
func deleteBackward() {
_ = input.popLast()
setNeedsDisplay()
}
override func draw(_ rect: CGRect) {
let attrs: [NSAttributedString.Key: Any] = [.font: UIFont.systemFont(ofSize: 32)]
let attributedString = NSAttributedString(string: input, attributes: attrs)
attributedString.draw(in: rect)
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79660902/how-to-get-swiftui-keyboard-toolbar-when-using-custom-text-view-that-uses-uikeyi[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия