V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
MrL30716
V2EX  ›  iOS

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

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

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

    父 VC addChildVC: AVC, BVC

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

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

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

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