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