V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GeekHub
MrLQX
V2EX  ›  iOS

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

  •  
  •   MrLQX · 12 天前 · 881 次点击

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

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

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

    父 VC addChildVC: AVC, BVC

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

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

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

    楼主不想自己实现 present 动画的话,就换一个方式转场吧,楼上说的直接设置 window 的跟视图就是去了些动画,但能满足你的需求
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4368 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 03:24 · PVG 11:24 · LAX 20:24 · JFK 23:24
    ♥ Do have faith in what you're doing.