参考:https://developer.apple.com/tutorials/swiftui/working-with-ui-controls
效果:点击右上角的用户按钮打开个人档案
档案显示个人信息
点击edit进入编辑状态,会出现cancel按钮,点击cancel返回个人档案,点击done提交编辑。
下面看看怎么实现:
在sceneDelegate中指定environmentObject,该对象表示绑定视图的数据会根据数据的修改而更新视图。
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController =
UIHostingController(rootView:SpeciesHome().environmentObject(UserData())
)
self.window = window
window.makeKeyAndVisible()
}
}
查看UserData,需要继承ObservableObject以获取其特性
final class UserData: ObservableObject {
@Published var showFavouriteOnly = false
@Published var animalData = speciesData
@Published var profile = Profile.default
}
在主页增加profile入口:profileButton,以属性的形式封装可以简化body的结构,它需要绑定一个bool属性的toggle来控制档案页面的展示。.sheet的isPresent动作可以绑定button的showingProfile布尔值达到控制效果。
在档案展示的时候必须把environmentObject传递进去,以保证后面使用的environment是一致的,就可以达到Observable对象控制多个视图更新的效果。
struct SpeciesHome: View {
@State var showingProfile = false
@EnvironmentObject private