如何从FlutterViewController“推送”UIViewController
我想在我们的Flutter视图中“推送”一个新的原生视图(如在iOS中的Activity和UIViewController),然后在完成/完成新的原生视图之后,使屏幕返回到我们的Flutter视图。
我可以在Android中执行此操作。 但是当我尝试在ios/Runner/AppDelegate.m
执行此操作时,我对iOS很新。
SwiftViewController *swiftViewController = [controller.storyboard instantiateViewControllerWithIdentifier:@"SwiftViewController"]; [(FlutterViewController *)self.window.rootViewController pushViewController:swiftViewController animated:YES];
它给出了错误:
没有可见的@interface为“FlutterViewController”声明选择器’pushViewController:animated’
那么如何在iOS中做到这一点? 谢谢
更新
问题解决了,你可以在这里找到我的示例代码。
您需要以编程方式或在故事板中将FlutterViewController嵌入到容器UINavigationController中,然后您将能够推送下一个控制器。
以下是以编程方式嵌入的示例:
@interface AppDelegate() @property (nonatomic, strong) UINavigationController *navigationController; @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [GeneratedPluginRegistrant registerWithRegistry:self]; UIViewController *flutterViewController = [[FlutterViewController alloc] init]; self.navigationController = [[UINavigationController alloc] initWithRootViewController:flutterViewController]; [self.navigationController setNavigationBarHidden:YES]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.rootViewController = self.navigationController; [self.window makeKeyAndVisible]; return true; } - (void)pushExample { UIViewController *viewController = [[UIViewController alloc] init]; [self.navigationController pushViewController:viewController animated:true]; } @end
需要时(例如按钮点击)调用pushExample
。 您也可以在此video中查看“故事板”方式
pushViewController
仅在您的控制器是navigation stack
的一部分时才有效,即如果您的FlutterViewController
嵌入在UINavigationController
,那么您可以像这样push
另一个控制器:
self.navigationController?.pushViewController(swiftViewController, animated: true)
第二个选项是 :如果FlutterViewController
没有嵌入到UINavigationController
,你可以简单地从中present
另一个控制器,如下所示:
self.present(swiftViewController, animated: true, completion: nil)
也许你可以看一下webview插件。 与您的描述类似,他们启动一个新的Activity或UIViewController。 显然,你不需要开始使用webview。