Objective c iOS 5 UINavigationBar删除子视图(图像子视图)删除导航栏

Objective c iOS 5 UINavigationBar删除子视图(图像子视图)删除导航栏,objective-c,ios,xcode,ios5,Objective C,Ios,Xcode,Ios5,在我的应用程序中,它可以在iOS 4导航栏上正常工作,并可以启动iOS 5。以下是导致问题的原因:我正在删除RootViewController ViewWillExample方法中的子视图: for(UIView* view in self.navigationController.navigationBar.subviews) { if ([view isKindOfClass:[UILabel class]]) { [vie

在我的应用程序中,它可以在iOS 4导航栏上正常工作,并可以启动iOS 5。以下是导致问题的原因:我正在删除RootViewController ViewWillExample方法中的子视图:

for(UIView* view in self.navigationController.navigationBar.subviews)
    {
        if ([view isKindOfClass:[UILabel class]]) 
        {
            [view removeFromSuperview];
        }
        if([view isKindOfClass:[UIImageView class]])
        {
            [view removeFromSuperview];
        }
    }

我之所以这样做是因为我推到导航控制器上的第二个视图控制器会将导航栏的图像和标签添加到导航栏中,当视图弹出时,我必须将其删除。在iOS 5中,上述代码删除导航栏。如何解决此问题或正确的方法来支持iOS4和IOS5?

您可以将添加的视图创建为各自UIKit类的子类,并对照这些特定子类进行检查。实际上,为了获得最清晰、可读性最好的代码,您应该对导航控制器和导航栏进行子类化,以允许绘制自定义图像和标签,这样您就可以简单地将背景图像和前景标签设置为零。整合起来需要一点时间,但最终结果会更具可扩展性。

为这些图像和uilabel设置标签,然后将其从上面的代码中删除就可以了

for(UIView* view in self.navigationController.navigationBar.subviews)
{
   if(view.tag == 9 || view.tag == 99)
   {
      [view removeFromSuperview];
   }
}

是的,这在技术上是可行的,但是如果您或其他人需要稍后再来,您的代码将变得不易理解。您将面临无法有效读取和跟踪代码执行情况的风险。至少要使这些标记保持常量,以帮助查看要删除的内容。只需使用以下代码[(UILabel*)[self.navigationController.navigationBar viewWithTag:yourViewTag]removeFromSuperview]删除子视图即可;