相关疑难解决方法(0)

SwiftUI:如何弹出到根视图

最后,现在有了Beta 5,我们可以以编程方式弹出到父视图。但是,在我的应用程序中,有几个地方视图都有一个“保存”按钮,该按钮可以结束几个步骤并返回到开始。在UIKit中,我使用popToRootViewController(),但是我一直无法找到在SwiftUI中执行相同操作的方法。

以下是我尝试实现的模式的简单示例。有任何想法吗?

import SwiftUI

struct DetailViewB: View {
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
    var body: some View {
        VStack {
            Text("This is Detail View B.")

            Button(action: { self.presentationMode.value.dismiss() } )
            { Text("Pop to Detail View A.") }

            Button(action: { /* How to do equivalent to popToRootViewController() here?? */ } )
            { Text("Pop two levels to Master View.") }

        }
    }
}

struct DetailViewA: View {
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
    var body: some View {
        VStack {
            Text("This is Detail View …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

14
推荐指数
11
解决办法
1957
查看次数

SwiftUI NavigationLink:成功运行帐户创建代码后导航到目标视图

我想运行帐户创建逻辑,然后,如果成功,转换到目标视图。否则,我将提供错误表。NavigationLink 会立即转换到目标视图。

如果我使用 isActive 重载和空字符串作为文本(它创建一个具有零帧的视图)创建一个幻影 NavigationLink,我可以让它工作。然后,我使用显示给用户的按钮切换 isActive 属性,该按钮首先运行帐户创建逻辑,并在链的末尾将 NavigationLink 切换为活动状态。我在一个 NavigationView 里面。

        @State private var isActive: Bool = false

        NavigationView {

            // Name, Email, Password Textfields here

            // Button to run account creation logic:

            Button(action: {
                // Account creation promise chain here, then...
                self.isActive.toggle()
            }) {
                Text("Create Account")
            }

            // Phantom navigation link:

            NavigationLink("", destination: VerifyEmailView(email: email), isActive: self.$isActive)

        }
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?从按钮触发运行帐户创建逻辑,然后激活虚拟导航链接以转换到下一个屏幕似乎是不好的做法。

swiftui

13
推荐指数
2
解决办法
9725
查看次数

SwiftUI中的自定义segue动画(导航动画)

在SwiftUI我们使用NavigationViewNavigationLink意见进行导航(我们习惯称之为segueUIKit)。UIKit中的标准segue是showsegue。在SwiftUI中,我们可以简单地执行以下操作:

struct ContentView: View {
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: Text("Destination")) {
                    Text("Navigate!")
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

具有完全相同的效果(即使单词segue消失了)。

有时(实际上是经常),我们需要自定义segue动画。

  • 我们可以决定完全不对动画进行动画处理,实际上,在情节提要中,我们可以Animates通过单击动画来在属性检查器中找到该属性(true / false)。这样,目标视图控制器将立即代替源视图控制器出现。
  • 或者我们可以决定执行自定义动画。通常,这是通过实现符合UIViewControllerAnimatedTransitioning协议的对象来完成的。所有的魔术都发生在animateTransition使我们能够访问源视图控制器和目标视图控制器的方法中。

例如,一个简单的淡入淡出segue动画可能类似于:

-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{
    UIView* containerView = [transitionContext containerView];
    UIViewController* fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIViewController* toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

    toVC.view.alpha = 0;
    [containerView addSubview:toVC.view];

    [UIView animateWithDuration:1 animations:^{
        toVC.view.alpha = 1;
        fromVC.view.alpha = 0;
    } completion:^(BOOL …
Run Code Online (Sandbox Code Playgroud)

animation uikit ios swift swiftui

9
推荐指数
1
解决办法
337
查看次数

标签 统计

swiftui ×3

swift ×2

animation ×1

ios ×1

uikit ×1