MrL30716
V2EX  ›  iOS

ios 两个 ViewController 跳转相关问题咨询

  •  
  •   MrL30716 · Sep 15, 2020 · 3620 views
    This topic created in 2240 days ago, the information mentioned may be changed or developed.

    使用 oc 写了两个 ViewController 界面,从 AViewController 跳转到 BViewController 使用了[self presentViewController:bVC animated:YES completion:nil]; 但是我想跳转的同时把 AViewController 销毁掉,使用[self dismissViewControllerAnimated:YES completion:nil];也无法实现,还有什么比较好的方法吗

    37 replies  •  2020-09-16 11:31:49 +08:00
    MrL30716
    MrL30716
    OP
    Sep 15, 2020
    1
    Android activity 跳转只需要 finsh 就好了,因为不怎么熟悉 ios,Google 了一天,也找不到比较好的方法
    xayoung
    xayoung
    Sep 15, 2020
    2
    这样做的目的是什么?
    MrL30716
    MrL30716
    OP
    Sep 15, 2020
    3
    @xayoung 登录界面有手机验证码和密码登录界面,跳转到密码登录界面的时候把手机验证码界面关闭了
    ezrealinxh
    ezrealinxh
    Sep 15, 2020
    4
    push 到 B 然后把 root 替换成 B
    MrL30716
    MrL30716
    OP
    Sep 15, 2020
    5
    @Lin0936 我试试
    baijiahei
    baijiahei
    Sep 15, 2020
    6
    用 push 啊 present 是一些临时展示的或者临时设置界面才用这个吧
    CommandZi
    CommandZi
    Sep 15, 2020
    7
    先 dismissA 再 presentB
    MrL30716
    MrL30716
    OP
    Sep 15, 2020
    8
    @CommandZi 不行,这个试过了
    MrL30716
    MrL30716
    OP
    Sep 15, 2020
    9
    @baijiahei 使用 NavigationController 才可以使用 push,目前我没有使用 NavigationController
    EggmanQ
    EggmanQ
    Sep 15, 2020
    10
    父 VC: VC
    EggmanQ
    EggmanQ
    Sep 15, 2020
    11
    靠, 按错了,
    kera0a
    kera0a
    Sep 15, 2020 via iPhone
    12
    用 push
    现在 nav 的 viewControllers 里有 [root,A]
    然后 nav.serViewController([root,B])

    push 能自定义跳转动画,有个页面栈数组,可以随意调整
    CommandZi
    CommandZi
    Sep 15, 2020
    13
    @MrLQX 肯定姿势错了,不要用 A presentB,用 A 的上一级
    EggmanQ
    EggmanQ
    Sep 15, 2020
    14
    连续按错, 我觉得思路可以这样

    父 VC addChildVC: AVC, BVC

    父 VC.view addSubView: AVC.view, BVC.view

    然后可以自定义处理两个 View 的显示和动画, 数据和验证逻辑可以给到父 VC 处理
    frqk
    frqk
    Sep 15, 2020
    15
    bVC 的实例是在 aVC 创建的话,不能在 bVC 移除 aVC 吧。
    要是 aVC 和 bVC 是在某个 VC 上的话,在 bVC 里 delegate 给那个 VC 让他把 aVC 移除了应该是可以的。
    codeisjobs
    codeisjobs
    Sep 15, 2020 via iPhone
    16
    不要销毁 a 界面。等登录成功后重新设置 uiapplication 的 keywindow.rootviewcontroller 的时候再 dismiss a 界面
    codeisjobs
    codeisjobs
    Sep 15, 2020 via iPhone
    17
    如果不想在 b 界面可以返回的话,就不设置左侧返回按钮,然后设置全屏显示。
    MrL30716
    MrL30716
    OP
    Sep 15, 2020
    18
    @codeisjobs 我这边 a 界面右下角有个切换按钮,点击这个按钮可以跳转到 b 界面
    MrL30716
    MrL30716
    OP
    Sep 15, 2020
    19
    @codeisjobs 主要是这个按钮跳转的实现,a 跳转到 b 的时候,销毁 a
    BabyYuuki
    BabyYuuki
    Sep 15, 2020
    20
    你在 bVC 退出的时候,用 present AViewController 界面的那个控制器调用 dismissViewControllerAnimated 方法试试呢
    codeisjobs
    codeisjobs
    Sep 15, 2020 via iPhone
    21
    @MrLQX 看你怎么跳的,present 方法的话,不好 dismiss,除非是用 rootviewcontroller 方式跳的
    codeisjobs
    codeisjobs
    Sep 15, 2020 via iPhone
    22
    @MrLQX 推荐你 a 全屏 present b,然后登录完成后,重新设置 rootvc,同时 b 里面 dismiss
    Elethom
    Elethom
    Sep 15, 2020 via iPhone
    23
    亲亲,这边建议您转行呢。
    isRealLeven
    isRealLeven
    Sep 15, 2020
    24
    亲亲,这边建议您转行呢。
    MrStark
    MrStark
    Sep 15, 2020
    25
    其实你可以把 A 和 B 都作为子控制器放在同一个控制器下进行切换操作的,这样就可以自由操作 A 和 B 的显示与释放了。
    MrL30716
    MrL30716
    OP
    Sep 15, 2020
    26
    感谢各位大佬,我主要是 Android 开发,ios 只是被拉过来写的点东西
    sjsurf
    sjsurf
    Sep 15, 2020
    27
    你可以考虑把 A 和 B 谁 present 颠倒一下。
    sjsurf
    sjsurf
    Sep 15, 2020
    28
    刚才理解错误你的需求了。 如果你的需求是 A 或者 B 的关系的话 应该用 subViewController 然后改 view 的转场动画。
    yu5121199
    yu5121199
    Sep 15, 2020
    29
    亲亲,这边建议您转行呢。
    superpeaser
    superpeaser
    Sep 15, 2020 via iPhone
    30
    你这样设计就不合理呢,建议你看看主流的 app 关于验证码和密码登录切换的逻辑是怎么设计的…
    salor
    salor
    Sep 16, 2020 via iPhone
    31
    VC 页面跳转子级不能销毁父级。你可以把两种验证方式作为两个视图,做好动画效果就行了。
    vincentxue
    vincentxue
    Sep 16, 2020
    32
    你这个是安卓的思维,iOS 的世界不是这样搞。登录注册转主页是一个很常见的逻辑,A present 到 B,在 B 里面完成之后在 dismiss 的同时发个通知把 rootVC 给换掉就行了,这是最简单的做法。这样 B 在 dissmiss 之后就销毁了,A 在 root 被换了之后没有引用也自己销毁了。
    Building
    Building
    Sep 16, 2020 via iPhone
    33
    将 AVC 作为子控制器添加到主控制器上,就可以 present BVC 后销毁掉 AVC 。
    canxden
    canxden
    Sep 16, 2020 via iPhone
    34
    代码上 b push a,然后不要动画,登录完毕,a diss 要动画就好了…
    canxden
    canxden
    Sep 16, 2020 via iPhone
    35
    如果一定要 a 到 b,再把 b 销毁,就切换 appdelegte 的 windows 的 rootvc,但是 a 和 b 不能是公用一个导航栏…
    laucenmi
    laucenmi
    Sep 16, 2020
    36
    appDelegate.window?.rootViewController = newVC
    oldVC 会自己销毁,直接赋值没动画效果,有需要可以自己加上
    MarginK
    MarginK
    Sep 16, 2020
    37
    你从 A present B 当然不可能销毁 A,因为只要 B 的视图层级没变,A 就永远都是 B 的 presentedViewController,你甚至还能从 A.presentedViewController 获取到 B

    还有,iOS 就不要去想着手动销毁页面的思维了,如果页面没有自动 dealloc 要么是你对使用的理解不对,要么是该 VC 中有东西释放不掉,请自己检查代码哦。

    楼主不想自己实现 present 动画的话,就换一个方式转场吧,楼上说的直接设置 window 的跟视图就是去了些动画,但能满足你的需求
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1661 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 115ms · UTC 23:37 · PVG 07:37 · LAX 15:37 · JFK 18:37
    ♥ Do have faith in what you're doing.