Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何仅在一个UIViewController中将自定义UIView添加到UINavigationBar_Ios_Objective C_Uiview_Uiviewcontroller_Uinavigationcontroller - Fatal编程技术网

Ios 如何仅在一个UIViewController中将自定义UIView添加到UINavigationBar

Ios 如何仅在一个UIViewController中将自定义UIView添加到UINavigationBar,ios,objective-c,uiview,uiviewcontroller,uinavigationcontroller,Ios,Objective C,Uiview,Uiviewcontroller,Uinavigationcontroller,好的,我正在尝试向我的navigationController的导航栏添加一个子视图,它工作得很好,但是,当推送细节控制器时,我不希望推送控制器的子视图出现在细节视图控制器的导航栏中 我感谢您提供的任何帮助/建议。重申:我需要子视图只显示在导航控制器的根目录中,而不显示在任何详细控制器中 以下是创建和添加navigationController子视图的当前代码: - (void)viewDidLoad { [super viewDidLoad]; self.ImageView

好的,我正在尝试向我的navigationController的导航栏添加一个子视图,它工作得很好,但是,当推送细节控制器时,我不希望推送控制器的子视图出现在细节视图控制器的导航栏中

我感谢您提供的任何帮助/建议。重申:我需要子视图只显示在导航控制器的根目录中,而不显示在任何详细控制器中

以下是创建和添加navigationController子视图的当前代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.ImageView = [[UIImageView alloc]init];
    self.ImageView.frame = CGRectMake(0, 8.5, 320, 36);
    self.ImageView.contentMode = UIViewContentModeScaleAspectFit;
    self.ImageView.image = [UIImage imageNamed:@"Logo"];
    self.ImageView.clipsToBounds = YES;
    [self.navigationController.navigationBar addSubview:self.ImageView];
}

最好的办法是

  • 向imageView添加标记
  • 使用标记访问您的imageView,并将其alpha设置为1,以便在主ViewCobTroller的视图中显示
  • 在新的viewcontroller的ViewWillExample方法中,使用相同的标记访问视图,然后将其alpha设置为0 这就是你应该解决的问题
    如果您需要代码,请发表评论。

    最好的方法是

  • 向imageView添加标记
  • 使用标记访问您的imageView,并将其alpha设置为1,以便在主ViewCobTroller的视图中显示
  • 在新的viewcontroller的ViewWillExample方法中,使用相同的标记访问视图,然后将其alpha设置为0 这就是你应该解决的问题
    如果您需要代码,请提供注释。

    在推送至其他视图控制器时添加此行

     [[self.navigationController.navigationBar viewWithTag:101] removeFromSuperview];
    
    从其他viewController重新创建

    - (void)viewWillApper
    {
    
        self.ImageView = [[UIImageView alloc]init];
        self.ImageView.frame = CGRectMake(0, 8.5, 320, 36);
        self.ImageView.contentMode = UIViewContentModeScaleAspectFit;
        self.ImageView.image = [UIImage imageNamed:@"Logo"];
        self.ImageView.clipsToBounds = YES;
        self.ImageView.tag =101;
        [self.navigationController.navigationBar addSubview:self.ImageView];
    }
    

    推送到其他视图控制器时添加此行

     [[self.navigationController.navigationBar viewWithTag:101] removeFromSuperview];
    
    从其他viewController重新创建

    - (void)viewWillApper
    {
    
        self.ImageView = [[UIImageView alloc]init];
        self.ImageView.frame = CGRectMake(0, 8.5, 320, 36);
        self.ImageView.contentMode = UIViewContentModeScaleAspectFit;
        self.ImageView.image = [UIImage imageNamed:@"Logo"];
        self.ImageView.clipsToBounds = YES;
        self.ImageView.tag =101;
        [self.navigationController.navigationBar addSubview:self.ImageView];
    }
    

    也许您可以标记视图,self.ImageView.tag=100;然后,在详图控制器的视图中将显示:

     UIView view = (UIView *) [self.navigationControler.navigationBar viewWithTag:100];
     view.hidden = true;
    
    在视野中,你将消失

     UIView view = (UIView *) [self.navigationControler.navigationBar viewWithTag:100];
     view.hidden = false;
    

    也许您可以标记视图,self.ImageView.tag=100;然后,在详图控制器的视图中将显示:

     UIView view = (UIView *) [self.navigationControler.navigationBar viewWithTag:100];
     view.hidden = true;
    
    在视野中,你将消失

     UIView view = (UIView *) [self.navigationControler.navigationBar viewWithTag:100];
     view.hidden = false;
    

    这只会影响调用视图的ocontroller:
    在navigationController的视图控制器中

    - (void) viewDidLoad {
            // Create / instantiate from Nib / Use already initialized UIView
            [self.navigationItem setTitleView:<your subView here>];
    }
    
    -(void)viewDidLoad{
    //从Nib创建/实例化/使用已初始化的UIView
    [self.navigationItem setTitleView:];
    }
    

    当您导航到其他某个viewController时,子视图将不在那里。

    这将仅影响调用视图ocontroller:
    在navigationController的视图控制器中

    - (void) viewDidLoad {
            // Create / instantiate from Nib / Use already initialized UIView
            [self.navigationItem setTitleView:<your subView here>];
    }
    
    -(void)viewDidLoad{
    //从Nib创建/实例化/使用已初始化的UIView
    [self.navigationItem setTitleView:];
    }
    


    导航到其他viewController时,子视图将不在那里。

    为什么要在导航栏上添加uiimageview。你可以简单地尝试一下setBackgroundImage你不知道UINavigationBarNo的setBackgroundImage,那根本不是我想要的。我正在为中的徽标设置动画。动画意味着您是在代码中实现的,或者使用GIF图像,这可能会发布您的屏幕快照为什么要在导航栏上添加uiimageview。你可以简单地尝试一下setBackgroundImage你不知道UINavigationBarNo的setBackgroundImage,那根本不是我想要的。我正在为一个徽标制作动画。制作动画意味着你是在代码中实现的,或者使用GIF图像,可能会发布你的屏幕快照我之前尝试过类似的方法(不包括视图标记方法),结果是我使用了默认的边弹出手势,它会出现在错误的视图控制器中,并且会闪烁。请使用这种方法&注意ViewWillExample方法而不是ViewDidExample。我使用的是ViewWillExample方法,问题是它在使用交互式弹出手势时会立即出现。好的,看起来唯一的解决方案是在细节控制器中使用ViewWillDisplay,在演示控制器中使用ViewDidDisplay来解决此问题。我之前尝试过类似的方法(减去视图标记方法),结果是使用默认的边缘弹出手势,它会出现在错误的视图控制器中,并且会闪烁。请使用这种方法&注意ViewWillExample方法而不是ViewDidExample。我使用的是ViewWillExample方法,问题是它在使用交互式弹出手势时会立即出现。好的,看起来唯一的解决方案是在细节控制器中使用ViewWillDisplay,在演示控制器中使用ViewDidDisplay来解决此问题。