iOS一個UIViewController顯示出來立刻又消失的解決思路(既:如何讓一個UIViewController頁面不知不覺的消失於UINavigationController)

 

思路:1.替換UINavigationController的pushVC方法。

             打印消失頁面導航控制器的所有子控制器(或用其他方法確定消失頁面所在的navivc)。

            2.就是下面寫的關於導航控制器setviewControllers一系列方法

 

 

繼承於UINavigationController,我們創建一個子類YYYNaviController。

然後其他頁面都使用這個YYYNaviController initRoot。

 

初級

重新實現下面父類pop方法。有可能有些頁面偷偷的執行了pop

- (UIViewController *)popViewControllerAnimated:(BOOL)animated{
    UIViewController *vv = [super popViewControllerAnimated:animated];
    return  vv;
}

- (NSArray<UIViewController *> *)popToRootViewControllerAnimated:(BOOL)animated{
    NSArray *vs = [super popToRootViewControllerAnimated:animated];
    //nil ?
    return vs;
}
- (NSArray<UIViewController *> *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated{
    return  [super popToViewController:viewController animated:animated];
}

 

中級

對屬性下手,重寫set get

@property(nonatomic,copy) NSArray<__kindof UIViewController *> *viewControllers; // The current view controller stack.

-(void)setViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers{

    [super setViewControllers:viewControllers];
}

- (NSArray<UIViewController *> *)viewControllers{
    return [super viewControllers];
}

 

 

高級

重寫這個方法

- (void)setViewControllers:(NSArray<UIViewController *> *)viewControllers animated:(BOOL)animated NS_AVAILABLE_IOS(3_0); // If animated is YES, then simulate a push or pop depending on whether the new top view controller was previously in the stack.

檢測方法:重寫方法 & 去掉實現代碼

- (void)setViewControllers:(NSArray<UIViewController *> *)viewControllers animated:(BOOL)animated{
    //去掉就不行了
}

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章