ios - 按下主页按钮时关闭 View Controller

标签 ios iphone swift uiviewcontroller

我正在使用 swift 创建一个应用程序。我有多个 View Controller 。当某人在特定的 viewController 中按下主页按钮时,我想关闭该 ViewController。我不想在其他 View Controller 中执行任何操作。我发现当我按下主页按钮后 Appdelagate func 将调用

 func applicationDidEnterBackground(application: UIApplication) {
        print("Enter my Guess")
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }

所以我设法在我的 View Controller (viewDidLoad) 上使用通知程序捕获此操作,如下所示

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("myObserverMethod:"), name:UIApplicationDidEnterBackgroundNotification, object: nil)

func myObserverMethod(notification : NSNotification) {

        if let viewControllers = navigationController?.viewControllers {
            for viewController in viewControllers {
                // some process
                if viewController.isKindOfClass(HomeVC) {
                    print("I am calledr")
//                    dismissViewControllerAnimated(false, completion: nil)

                }
            } 
        }
    }

现在我的问题是 View controller 没有解除。我的意思是没有任何行动发生。如何处理。

注意: 每当我按下主页按钮时,都会调用 myObserverMethod func 并调用 print("I am caller")。

我做错了什么?

编辑 1: 如果我在 HomeVC( View Controller 名称)中,我想关闭,否则无需关闭 View Controller 。

编辑 2: 我发现了为什么它总是进入那个 if.. 条件。原因总是它把 HomeVC 保存在内存中。所以总是进入如果。所以我在其中添加了另一个条件,如下所示。

 if (viewController.isViewLoaded() && viewController.view.window != nil){

                        print("I am calledr")
                        viewController.dismissViewControllerAnimated(false, completion: nil)
//                          self.presentingViewController!.dismissViewControllerAnimated(false, completion: nil)
                       // viewController.dismissViewControllerAnimated(false, completion: nil)
                    }

没有任何 Action 发生。我的意思是 View Controller 没有被关闭。

最佳答案

已更新

而不是使用模态视图 Controller ,这是我最初假设的,其中 this会适用,您显然正在使用 UINavigationController,它已记录在案 here .

导航 Controller 所谓的堆栈上的项目正在被“推送”和弹出。因此,就像您在评论中那样推送 Controller 一样 (navigationController!.pushViewController(controller, animated: false) ;,你必须弹出它才能摆脱它,像这样:popViewControllerAnimated(_:)。这会弹出最顶层的 VC,但是当你的 Controller 已经是根(因此也是唯一的)。

您的代码应如下所示:

if viewController.isKindOfClass(HomeVC) {
                    print("I am calledr")
                    navigationController.popViewControllerAnimated(false)
            }

注意:我不确切地知道您的代码和设置是什么样的,因此您可能需要尝试一下才能正常工作,具体取决于它是否是 Root View 等。

关于ios - 按下主页按钮时关闭 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34327680/

相关文章:

ios - Swift:使用 UIImageView 显示带有从数组 [0..4] 中获取的 URL 的图像

iphone - 音频文件无法在 iPhone 5 中播放

ios - Admob 在 segue 之前显示插页式广告 - Swift

ios - 使用建议栏快速获取键盘尺寸

ios - 在 Swift 4 中集成 LineChartView

javascript - 来自某个州的 react-native-map 标记图像来源

javascript - Hammerjs 无法在 IOS 中的 Chrome 或 Safari 上运行(使用 Vuejs 制作)

iphone - NSPredicate 以多个文件结尾

ios - Easy-Game-Center Sprite-Kit 集成

ios - objective-c - 标签中的多种颜色