【发布时间】:2021-08-04 11:14:35
【问题描述】:
我有一个包含多个视图的主视图,并根据 ObservabledObject 中变量的值变化选择一个,该变化在按钮按下时发生变化。
当我选择一个包含输入字段的视图时出现问题,在这种情况下,当我点击一个文本字段时,它没有显示键盘,而是将我带回主页视图。
它只发生在设备上,而不是模拟器上。
不过,如果将特定视图(带有 TextField 的视图)设置为主视图(Switch 中的第一种情况),它就可以工作。
这是 ObservableObject 代码:
class Watcher : ObservableObject {
@Published var currentView: String = "home"
}
主视图:
import SwiftUI
struct MainView : View {
var body: some View {
GeometryReader { geometry in
ZStack (alignment: .leading){
HomepageView()
.frame(width: geometry.size.width, height: geometry.size.height)
}
}
}
}
struct HomepageView : View {
@ObservedObject var watcher = Watcher()
init(){
UITabBar.appearance().isHidden = true
JSONHandler.fetchData(webService: "https://myWebsite.com/app/request.php") {
print("loaded")
}
}
var body: some View {
ZStack {
VStack {
TabView {
switch self.watcher.currentView {
case "home": //STARTING CASE
NavigationView {
DailyMenuView()
.navigationTitle("Recipes APP")
.navigationBarTitleDisplayMode(.inline)
}
.opacity(self.watcher.currentView == "newRecipe" ? 0 : 1)
case "innerMenu":
InnerMenuView(watcher: watcher)
case "members":
MembersView(watcher: watcher)
case "recipe":
RecipeView(watcher: watcher)
case "newRecipe": //TextField View
TestView()
default:
Text("Error")
}
}
}
VStack {
Spacer()
MenuTabView(watcher: watcher)
}
.edgesIgnoringSafeArea(.bottom)
}
.environment(\.colorScheme, self.watcher.currentView == "home" ? .dark : .light)
}
}
struct MainView_Previews: PreviewProvider {
static var previews: some View {
MainView()
}
}
最后是包含 TextField 的 View:
import SwiftUI
struct TestView: View {
@State var text: String = ""
var body: some View {
VStack {
Text("TEST VIEW")
.font(.largeTitle)
.fontWeight(.bold)
Spacer()
TextField("Write here", text: $text)
.font(.title)
.padding()
.border(Color.red, width: 2)
Spacer()
}
}
}
struct TestView_Previews: PreviewProvider {
static var previews: some View {
TestView()
}
}
希望你能帮我解决这个问题!
如果您需要更多信息,请询问我。
【问题讨论】:
标签: swift swiftui keyboard ios14