使用 oc 写了两个 ViewController 界面,从 AViewController 跳转到 BViewController 使用了[self presentViewController:bVC animated:YES completion:nil]; 但是我想跳转的同时把 AViewController 销毁掉,使用[self dismissViewControllerAnimated:YES completion:nil];也无法实现,还有什么比较好的方法吗
1
MrLQX OP Android activity 跳转只需要 finsh 就好了,因为不怎么熟悉 ios,Google 了一天,也找不到比较好的方法
|
2
xayoung 2020-09-15 16:57:15 +08:00
这样做的目的是什么?
|
4
Lin0936 2020-09-15 17:05:58 +08:00
push 到 B 然后把 root 替换成 B
|
6
baijiahei 2020-09-15 17:25:19 +08:00
用 push 啊 present 是一些临时展示的或者临时设置界面才用这个吧
|
7
CommandZi 2020-09-15 17:33:56 +08:00
先 dismissA 再 presentB
|
9
MrLQX OP @baijiahei 使用 NavigationController 才可以使用 push,目前我没有使用 NavigationController
|
10
EggmanQ 2020-09-15 17:41:21 +08:00
父 VC: VC
|
11
EggmanQ 2020-09-15 17:41:45 +08:00
靠, 按错了,
|
12
kera0a 2020-09-15 17:42:18 +08:00 via iPhone
用 push
现在 nav 的 viewControllers 里有 [root,A] 然后 nav.serViewController([root,B]) push 能自定义跳转动画,有个页面栈数组,可以随意调整 |
14
EggmanQ 2020-09-15 17:44:35 +08:00
连续按错, 我觉得思路可以这样
父 VC addChildVC: AVC, BVC 父 VC.view addSubView: AVC.view, BVC.view 然后可以自定义处理两个 View 的显示和动画, 数据和验证逻辑可以给到父 VC 处理 |
15
frqk 2020-09-15 17:48:33 +08:00
bVC 的实例是在 aVC 创建的话,不能在 bVC 移除 aVC 吧。
要是 aVC 和 bVC 是在某个 VC 上的话,在 bVC 里 delegate 给那个 VC 让他把 aVC 移除了应该是可以的。 |
16
codeisjobs 2020-09-15 17:49:34 +08:00 via iPhone
不要销毁 a 界面。等登录成功后重新设置 uiapplication 的 keywindow.rootviewcontroller 的时候再 dismiss a 界面
|
17
codeisjobs 2020-09-15 17:51:05 +08:00 via iPhone
如果不想在 b 界面可以返回的话,就不设置左侧返回按钮,然后设置全屏显示。
|
18
MrLQX OP @codeisjobs 我这边 a 界面右下角有个切换按钮,点击这个按钮可以跳转到 b 界面
|
19
MrLQX OP @codeisjobs 主要是这个按钮跳转的实现,a 跳转到 b 的时候,销毁 a
|
20
BabyYuuki 2020-09-15 17:56:16 +08:00
你在 bVC 退出的时候,用 present AViewController 界面的那个控制器调用 dismissViewControllerAnimated 方法试试呢
|
21
codeisjobs 2020-09-15 17:58:21 +08:00 via iPhone
@MrLQX 看你怎么跳的,present 方法的话,不好 dismiss,除非是用 rootviewcontroller 方式跳的
|
22
codeisjobs 2020-09-15 18:00:14 +08:00 via iPhone
@MrLQX 推荐你 a 全屏 present b,然后登录完成后,重新设置 rootvc,同时 b 里面 dismiss
|
23
Elethom 2020-09-15 18:09:05 +08:00 via iPhone
亲亲,这边建议您转行呢。
|
24
isRealLeven 2020-09-15 18:15:03 +08:00
亲亲,这边建议您转行呢。
|
25
MrStark 2020-09-15 18:27:48 +08:00
其实你可以把 A 和 B 都作为子控制器放在同一个控制器下进行切换操作的,这样就可以自由操作 A 和 B 的显示与释放了。
|
26
MrLQX OP 感谢各位大佬,我主要是 Android 开发,ios 只是被拉过来写的点东西
|
27
sjsurf 2020-09-15 19:35:15 +08:00
你可以考虑把 A 和 B 谁 present 颠倒一下。
|
28
sjsurf 2020-09-15 19:37:25 +08:00
刚才理解错误你的需求了。 如果你的需求是 A 或者 B 的关系的话 应该用 subViewController 然后改 view 的转场动画。
|
29
yu5121199 2020-09-15 19:38:52 +08:00
亲亲,这边建议您转行呢。
|
30
superpeaser 2020-09-15 22:31:19 +08:00 via iPhone
你这样设计就不合理呢,建议你看看主流的 app 关于验证码和密码登录切换的逻辑是怎么设计的…
|
31
salor 2020-09-16 00:46:36 +08:00 via iPhone
VC 页面跳转子级不能销毁父级。你可以把两种验证方式作为两个视图,做好动画效果就行了。
|
32
vincentxue 2020-09-16 06:29:41 +08:00
你这个是安卓的思维,iOS 的世界不是这样搞。登录注册转主页是一个很常见的逻辑,A present 到 B,在 B 里面完成之后在 dismiss 的同时发个通知把 rootVC 给换掉就行了,这是最简单的做法。这样 B 在 dissmiss 之后就销毁了,A 在 root 被换了之后没有引用也自己销毁了。
|
33
Building 2020-09-16 07:30:36 +08:00 via iPhone
将 AVC 作为子控制器添加到主控制器上,就可以 present BVC 后销毁掉 AVC 。
|
34
canxden 2020-09-16 08:16:51 +08:00 via iPhone
代码上 b push a,然后不要动画,登录完毕,a diss 要动画就好了…
|
35
canxden 2020-09-16 08:20:01 +08:00 via iPhone
如果一定要 a 到 b,再把 b 销毁,就切换 appdelegte 的 windows 的 rootvc,但是 a 和 b 不能是公用一个导航栏…
|
36
laucenmi 2020-09-16 09:35:00 +08:00
appDelegate.window?.rootViewController = newVC
oldVC 会自己销毁,直接赋值没动画效果,有需要可以自己加上 |
37
MarginK 2020-09-16 11:31:49 +08:00
你从 A present B 当然不可能销毁 A,因为只要 B 的视图层级没变,A 就永远都是 B 的 presentedViewController,你甚至还能从 A.presentedViewController 获取到 B
还有,iOS 就不要去想着手动销毁页面的思维了,如果页面没有自动 dealloc 要么是你对使用的理解不对,要么是该 VC 中有东西释放不掉,请自己检查代码哦。 楼主不想自己实现 present 动画的话,就换一个方式转场吧,楼上说的直接设置 window 的跟视图就是去了些动画,但能满足你的需求 |