【问题标题】:Find ViewController in NavigationController with special key使用特殊键在 NavigationController 中查找 ViewController
【发布时间】:2014-10-16 14:49:19
【问题描述】:

我有一个带有不同 ViewController 的 NavigationController。有时我想将 ViewController 推送到已包含在内的 NavigationController。 在这种情况下,我想从 TopController 移动到现有的 ViewController,并在 top 和现有的 ViewController 之间弹出所有其他 ViewController。

有没有办法给 ViewController 一个特殊的 id(例如 NSString),以便稍后在“NavigationController.viewControllers”中找到他? 或者我应该使用单独的字典来管理我的 ViewControllers?

或者有没有更好的方法,我不考虑。

最好的问候

【问题讨论】:

  • 一些视图控制器是同一个类,还是都不同?
  • 大多数时候是同一类,但内容不同。但我对每个内容都有一个唯一的 ID。

标签: ios objective-c iphone uiviewcontroller


【解决方案1】:

在您的 appDelegate 上,您可以存储您的所有 ViewController 以及何时需要弹出调用:

[self.navigationController popToViewController:yourViewController animated:YES];

或者你可以尝试搜索

NSArray *viewControllers = self.navigationController.viewControllers 
for (UIVIewController *anVC in viewControllers) {
    if (anVC isKindOfClass:[yourController class] {
        [self.navigationController popToViewController:anVC animated:YES];
        break;
    }
}

希望对你有所帮助。

【讨论】:

  • 大多数时候,视图控制器是同一个类。
  • 好的,所以添加一个自定义属性,如标签或 id,if(anVC.tag ==lookingTag) 是一个很好的属性。或者使用视图控制器存储的第一种方法。
【解决方案2】:

注意:由于视图控制器是同一个类,大多数时候

在每个控制器上添加 strUniqueID 属性,同时将视图控制器推送到导航控制器不要忘记设置它

现在您知道要删除哪个唯一 ID,所以找到它

//Firstly find your viewController
for(id viewcontroller in self.navigationController.viewControllers)
{
     //For finding specific viewController use isKindOfClass
     if(viewcontroller isKindOfClass:[YourViewControllerNameHere Class])
     {
         //Now find UniqueIDHere
         YourViewController *objYourViewController = (YourViewController *)viewcontroller
         if(YourViewControllerNameHere.strUniqueID isEqualToString:removeUniqueIDHere])
         {
             //Now pop to YourViewController
             [self.navigationController popToViewController:viewcontroller animated:YES];
             break;
         }
         
     }
     else if(viewcontroller isKindOfClass:[YourDifferentViewControllerNameHere Class]) //Different ViewControllers here like this
     {
         //Now find UniqueIDHere
         YourDifferentViewController *objYourDifferentViewController = (YourViewController *)viewcontroller
         if(YourDifferentViewController.strUniqueID isEqualToString:removeUniqueIDHere])
         {
             //Now pop to YourViewController
             [self.navigationController popToViewController:viewcontroller animated:YES];
             break;
         }
     }
       
}

试试这个:

//Firstly find your viewController
for(id viewcontroller in self.navigationController.viewControllers)
{
     //For finding specific viewController use isKindOfClass
     if(viewcontroller isKindOfClass:[YourViewControllerNameHere Class])
     {
         //Now pop to YourViewController
         [self.navigationController popToViewController:viewcontroller animated:YES];
         break;
     }
}

【讨论】:

  • 大多数时候,视图控制器是同一个类。
【解决方案3】:

斯威夫特 5

let vc = navVC.viewControllers.first(where: { $0.hasKey })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多