Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SwiftUI:如何从ContentView中关闭工作表并启动不同的工作表?_Ios_Swift_Xcode_Swiftui - Fatal编程技术网

Ios SwiftUI:如何从ContentView中关闭工作表并启动不同的工作表?

Ios SwiftUI:如何从ContentView中关闭工作表并启动不同的工作表?,ios,swift,xcode,swiftui,Ios,Swift,Xcode,Swiftui,对于我的应用程序,我有一个欢迎屏幕,介绍应用程序的功能,并允许用户创建他们的第一个项目。当用户单击该按钮时,我希望关闭“welcomeScreen”表,然后启动“NewMemendar”表 我试图通过创建一个“addNewTrigger”布尔值设置为false的可观察对象来实现这一点。当我单击Welcome屏幕上的添加新提醒按钮时,该按钮的操作会导致Welcome屏幕关闭,并将“addNewTrigger”布尔值切换为True。(我已经验证了这是否适用于打印报表)。然而,内容视图正在监听同一个观

对于我的应用程序,我有一个欢迎屏幕,介绍应用程序的功能,并允许用户创建他们的第一个项目。当用户单击该按钮时,我希望关闭“welcomeScreen”表,然后启动“NewMemendar”表

我试图通过创建一个“addNewTrigger”布尔值设置为false的可观察对象来实现这一点。当我单击Welcome屏幕上的添加新提醒按钮时,该按钮的操作会导致Welcome屏幕关闭,并将“addNewTrigger”布尔值切换为True。(我已经验证了这是否适用于打印报表)。然而,内容视图正在监听同一个观察到的对象以启动“新提醒”表,但该操作似乎不起作用

有人能看一下代码,看看我哪里出错了吗?或者建议可以提供该功能类型的替代方案

我真的很感谢你的帮助。谢谢

下面的代码

欢迎屏幕:

import SwiftUI
import Combine

struct welcomeScreen: View {
@Environment(\.presentationMode) var mode: Binding<PresentationMode>

@ObservedObject var addNewReminder = showAddScreen()

var body: some View {
    NavigationView {
        ZStack (alignment: .center) {

            LinearGradient(gradient: Gradient(colors: [Color.white, Color.white, Color.gray]), startPoint: .top, endPoint: .bottom)
                .edgesIgnoringSafeArea(.all)

            Image("Ellipse2")
                .offset(y: -475)

            VStack {
                Spacer()
                Text("Welcome to")
                    .foregroundColor(.white)
                    .fontWeight(.bold)
                Image("RemindrLogoWhite")
                Spacer()
                Text("What is remindr?")
                    .font(.title)
                    .fontWeight(.bold)
                    .padding(.bottom, 25)
                Text("Remindr is a simple app designed to help you schedule random reminders with the goal of clearing your mind.\n\nRemind yourself to check in with your body, set up positive affirmations, set your intentions; Whatever it is, the power is up to you.")
                    .padding(.horizontal, 25)
                    .padding(.bottom, 25)
                Text("Click below to get started:")
                    .fontWeight(.bold)

                // Add New Reminder Button
                Button(action: {
                    self.mode.wrappedValue.dismiss()
                    print("Add Reminder Button from Welcome Screen is Tapped")
                    self.addNewReminder.addNewTrigger.toggle()
                    print("var addNewTrigger has been changed to \(self.addNewReminder.addNewTrigger)")
                }) {
                    Image("addButton")
                        .renderingMode(.original)
                }.padding(.bottom, 25)

                Spacer()

            } .frame(maxWidth: UIScreen.main.bounds.width,
                     maxHeight: UIScreen.main.bounds.height)
        }
        .navigationBarTitle(Text(""), displayMode: .automatic)
        .navigationBarItems(trailing: Button(action: {
            self.mode.wrappedValue.dismiss()

        }, label: {
            Image(systemName: "xmark")
                .foregroundColor(.white)
        }))
    }
  }
}
import SwiftUI
import CoreData

class showAddScreen: ObservableObject {
@Published var addNewTrigger = false
}

struct ContentView: View {


@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: ReminderEntity.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \ReminderEntity.dateCreated, ascending: false)])
var reminder: FetchedResults<ReminderEntity>

// Sheet Control
@ObservedObject var addNewReminder = showAddScreen()
//@State private var showingAddScreen = false
@State var showWelcomeScreen = false
    
let emojiList = EmojiList()

//Toggle Control
@State var notifyOn = true

// Save Items Function
func saveItems() {
    do {
        try moc.save()
    } catch {
        print(error)
    }
}

// Delete Item Function
func deleteItem(indexSet: IndexSet) {
    let source = indexSet.first!
    let listItem = reminder[source]
    moc.delete(listItem)
}

// View Controller
var body: some View {
    VStack {
        NavigationView {
            ZStack (alignment: .top) {
                
                // List View
                List {
                    ForEach(reminder, id: \.self) { notification in
                        NavigationLink(destination: editRemindr(reminder: notification,
                                                                notifyOn: notification.notifyOn,
                                                                emojiChoice: Int(notification.emojiChoice),
                                                                notification: notification.notification ?? "unknown",
                                                                notes: notification.notes ?? "unknown")) {
                            // Text within List View
                            HStack {
                                // MARK: TODO
                                //Toggle("NotifyOn", isOn: self.$notifyOn)
                                //    .labelsHidden() // Hides the label/title
                                Text("\(self.emojiList.emojis[Int(notification.emojiChoice)]) \(notification.notification!)")
                            } 
                        }
                    } 
                    .onDelete(perform: deleteItem)
                    }.lineLimit(1)
                    
                    // Navigation Items
                    .navigationBarTitle("", displayMode: .inline)
                    .navigationBarItems(
                        leading:
                        HStack {
                            
                            Button(action: {
                                self.showWelcomeScreen.toggle()
                            }) {
                                Image(systemName: "info.circle.fill")
                                    .font(.system(size: 24, weight: .regular))
                            }.foregroundColor(.gray)
                            
                            // Positioning Remindr Logo on Navigation
                            Image("remindrLogoSmall")
                                .resizable()
                                .aspectRatio(contentMode: .fit)
                                //.frame(width: 60, height: 60, alignment: .center)
                                .padding(.leading, 83)
                                .padding(.top, -10)
                        },
                        
                        // Global Settings Navigation Item
                        trailing: NavigationLink(destination: globalSettings()){
                            Image("settings")
                                .font(Font.title.weight(.ultraLight))
                        }.foregroundColor(.gray)
                )
                
                // Add New Reminder Button
                VStack {
                    Spacer()
                    Button(action: { self.addNewReminder.addNewTrigger.toggle()
                    }) {
                        Image("addButton")
                            .renderingMode(.original)
                    }
                    .sheet(isPresented: $addNewReminder.addNewTrigger) {
                        
                        newRemindr().environment(\.managedObjectContext, self.moc)
                        
                    }
                }
            }
        }  .sheet(isPresented: $showWelcomeScreen) {
            welcomeScreen()
        }
    }
}
}
导入快捷界面
进口联合收割机
结构welcomeScreen:视图{
@环境(\.presentationMode)变量模式:绑定
@ObservedObject变量addNewReminder=showAddScreen()
var body:一些观点{
导航视图{
ZStack(对齐:。中心){
LinearGradient(渐变:渐变(颜色:[Color.white,Color.white,Color.gray]),起点:。顶部,终点:。底部)
.edgesIgnoringSafeArea(.all)
图像(“Ellipse2”)
.偏移量(y:-475)
VStack{
垫片()
文本(“欢迎使用”)
.foregroundColor(.白色)
.fontWeight(.粗体)
图像(“白色”)
垫片()
文本(“什么是提醒?”)
.font(.title)
.fontWeight(.粗体)
.padding(.bottom,25)
文本(“提醒”是一个简单的应用程序,旨在帮助您安排随机提醒,目的是让您头脑清醒。\n\n提醒自己检查身体,建立积极的肯定,确定您的意图;不管是什么,力量取决于您。”)
.padding(.卧式,25)
.padding(.bottom,25)
文本(“单击下面开始:”)
.fontWeight(.粗体)
//添加新提醒按钮
按钮(操作:{
self.mode.wrappedValue.disclose()文件
打印(“点击欢迎屏幕上的添加提醒按钮”)
self.addNewReminder.addNewTrigger.toggle()
打印(“var addNewTrigger已更改为\(self.addNewReminder.addNewTrigger)”)
}) {
图像(“添加按钮”)
.renderingMode(.original)
}.padding(.bottom,25)
垫片()
}.frame(最大宽度:UIScreen.main.bounds.width,
maxHeight:UIScreen.main.bounds.height)
}
.navigationBarTitle(文本(“”),显示模式:。自动)
.navigationBarItems(尾部:按钮(操作:{
self.mode.wrappedValue.disclose()文件
},标签:{
图像(系统名:“xmark”)
.foregroundColor(.白色)
}))
}
}
}
ContentView:

import SwiftUI
import Combine

struct welcomeScreen: View {
@Environment(\.presentationMode) var mode: Binding<PresentationMode>

@ObservedObject var addNewReminder = showAddScreen()

var body: some View {
    NavigationView {
        ZStack (alignment: .center) {

            LinearGradient(gradient: Gradient(colors: [Color.white, Color.white, Color.gray]), startPoint: .top, endPoint: .bottom)
                .edgesIgnoringSafeArea(.all)

            Image("Ellipse2")
                .offset(y: -475)

            VStack {
                Spacer()
                Text("Welcome to")
                    .foregroundColor(.white)
                    .fontWeight(.bold)
                Image("RemindrLogoWhite")
                Spacer()
                Text("What is remindr?")
                    .font(.title)
                    .fontWeight(.bold)
                    .padding(.bottom, 25)
                Text("Remindr is a simple app designed to help you schedule random reminders with the goal of clearing your mind.\n\nRemind yourself to check in with your body, set up positive affirmations, set your intentions; Whatever it is, the power is up to you.")
                    .padding(.horizontal, 25)
                    .padding(.bottom, 25)
                Text("Click below to get started:")
                    .fontWeight(.bold)

                // Add New Reminder Button
                Button(action: {
                    self.mode.wrappedValue.dismiss()
                    print("Add Reminder Button from Welcome Screen is Tapped")
                    self.addNewReminder.addNewTrigger.toggle()
                    print("var addNewTrigger has been changed to \(self.addNewReminder.addNewTrigger)")
                }) {
                    Image("addButton")
                        .renderingMode(.original)
                }.padding(.bottom, 25)

                Spacer()

            } .frame(maxWidth: UIScreen.main.bounds.width,
                     maxHeight: UIScreen.main.bounds.height)
        }
        .navigationBarTitle(Text(""), displayMode: .automatic)
        .navigationBarItems(trailing: Button(action: {
            self.mode.wrappedValue.dismiss()

        }, label: {
            Image(systemName: "xmark")
                .foregroundColor(.white)
        }))
    }
  }
}
import SwiftUI
import CoreData

class showAddScreen: ObservableObject {
@Published var addNewTrigger = false
}

struct ContentView: View {


@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: ReminderEntity.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \ReminderEntity.dateCreated, ascending: false)])
var reminder: FetchedResults<ReminderEntity>

// Sheet Control
@ObservedObject var addNewReminder = showAddScreen()
//@State private var showingAddScreen = false
@State var showWelcomeScreen = false
    
let emojiList = EmojiList()

//Toggle Control
@State var notifyOn = true

// Save Items Function
func saveItems() {
    do {
        try moc.save()
    } catch {
        print(error)
    }
}

// Delete Item Function
func deleteItem(indexSet: IndexSet) {
    let source = indexSet.first!
    let listItem = reminder[source]
    moc.delete(listItem)
}

// View Controller
var body: some View {
    VStack {
        NavigationView {
            ZStack (alignment: .top) {
                
                // List View
                List {
                    ForEach(reminder, id: \.self) { notification in
                        NavigationLink(destination: editRemindr(reminder: notification,
                                                                notifyOn: notification.notifyOn,
                                                                emojiChoice: Int(notification.emojiChoice),
                                                                notification: notification.notification ?? "unknown",
                                                                notes: notification.notes ?? "unknown")) {
                            // Text within List View
                            HStack {
                                // MARK: TODO
                                //Toggle("NotifyOn", isOn: self.$notifyOn)
                                //    .labelsHidden() // Hides the label/title
                                Text("\(self.emojiList.emojis[Int(notification.emojiChoice)]) \(notification.notification!)")
                            } 
                        }
                    } 
                    .onDelete(perform: deleteItem)
                    }.lineLimit(1)
                    
                    // Navigation Items
                    .navigationBarTitle("", displayMode: .inline)
                    .navigationBarItems(
                        leading:
                        HStack {
                            
                            Button(action: {
                                self.showWelcomeScreen.toggle()
                            }) {
                                Image(systemName: "info.circle.fill")
                                    .font(.system(size: 24, weight: .regular))
                            }.foregroundColor(.gray)
                            
                            // Positioning Remindr Logo on Navigation
                            Image("remindrLogoSmall")
                                .resizable()
                                .aspectRatio(contentMode: .fit)
                                //.frame(width: 60, height: 60, alignment: .center)
                                .padding(.leading, 83)
                                .padding(.top, -10)
                        },
                        
                        // Global Settings Navigation Item
                        trailing: NavigationLink(destination: globalSettings()){
                            Image("settings")
                                .font(Font.title.weight(.ultraLight))
                        }.foregroundColor(.gray)
                )
                
                // Add New Reminder Button
                VStack {
                    Spacer()
                    Button(action: { self.addNewReminder.addNewTrigger.toggle()
                    }) {
                        Image("addButton")
                            .renderingMode(.original)
                    }
                    .sheet(isPresented: $addNewReminder.addNewTrigger) {
                        
                        newRemindr().environment(\.managedObjectContext, self.moc)
                        
                    }
                }
            }
        }  .sheet(isPresented: $showWelcomeScreen) {
            welcomeScreen()
        }
    }
}
}
导入快捷界面
导入CoreData
类showAddScreen:ObservableObject{
@已发布变量addNewTrigger=false
}
结构ContentView:View{
@环境(\.managedObjectContext)变量moc
@FetchRequest(实体:ReminderEntity.entity(),SortDescriptor:[NSSortDescriptor(键路径:\ReminderEntity.dateCreated,升序:false)])
var提醒:FetchedResults
//板材控制
@ObservedObject变量addNewReminder=showAddScreen()
//@状态私有变量showingAddScreen=false
@状态变量showWelcomeScreen=false
让emojiList=emojiList()
//切换控制
@状态变量notifyOn=true
//保存项目功能
func saveItems(){
做{
试试moc.save()
}抓住{
打印(错误)
}
}
//删除项目功能
func deleteItem(索引集:索引集){
让source=indexSet.first!
let listItem=提醒[来源]
主运行中心删除(列表项)
}
//视图控制器
var body:一些观点{
VStack{
导航视图{
ZStack(对齐:。顶部){
//列表视图
名单{
ForEach(提醒,id:\.self){中的通知
导航链接(目的地:编辑提醒(提醒:通知、,
notifyOn:notification.notifyOn,
emojiChoice:Int(notification.emojiChoice),
通知:notification.notification???“未知”,
备注:notification.notes??“未知”)){
//列表视图中的文本
HStack{
//马克:待办事项
//切换(“NotifyOn”,isOn:self.$NotifyOn)
//.labelsHidden()//隐藏标签/标题
文本(\(self.emojiList.emojis[Int(notification.emojiChoice)])\(notification.notification!))
} 
}
} 
.onDelete(执行:删除项)
}.lineLimit(1)
//导航项目
.navigationBarTitle(“,显示模式:。内联)
.航海术语(
领先:
HStack{
按钮(操作:{
self.showWelcomeScreen.toggle()
}  .sheet(isPresented: $showWelcomeScreen, onDismiss: {
              // it is better to show second sheet with delay to give chance
              // for first one to animate closing to the end
              DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                 self.addNewReminder.addNewTrigger.toggle()
              }
          }
   ) {
    welcomeScreen()
}