【问题标题】:UIImageView tap to hide navigation barUIImageView 点击隐藏导航栏
【发布时间】:2011-11-01 09:22:23
【问题描述】:

我有一个显示来自网络的图像的视图。该视图只有一个UIImageView。我想知道如何在用户点击时隐藏navigationBar,并在用户再次点击视图时再次显示它。 (就像原生 iPhone 照片应用程序一样)

我知道我可以用这个

[self.navigationController setNavigationBarHidden:YES 动画:YES];

但我不知道在哪里使用这个,在哪里输入这个代码。

我们将不胜感激

【问题讨论】:

    标签: iphone objective-c uinavigationcontroller uiimageview


    【解决方案1】:

    初始化一个新的UITapGestureRecognizer

    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(toggleNavigationBar:)];
    tapGestureRecognizer.numberOfTapsRequired = 1;
    tapGestureRecognizer.numberOfTouchesRequired = 1;
    [self.imageView addGestureRecognizer:tapGestureRecognizer];
    [tapGestureRecognizer release];
    

    您还必须确保 UIImageView 的 userInteractionEnabled 设置为 YES,因为默认情况下它在 UIImageView 上设置为 NO

    self.imageView.userInteractionEnabled = YES;
    

    最后,编写手势识别器识别时调用的方法。这是手势识别器的初始化方法中action: 参数中传递的方法选择器:

    - (void)toggleNavigationBar:(UITapGestureRecognizer *)tapGestureRecognizer
    {
        [self.navigationController setNavigationBarHidden:![self.navigationController isNavigationBarHidden] animated:YES];
    }
    

    【讨论】:

    • 这正是我正在做的。但是没有调用 toggleNavigatorBar 方法:(。我错过了一些非常明显的东西吗?
    • UIImageView 上的userInteractionEnabled 是否设置为YES?还要确保在您正在处理的所有视图和子视图上将exclusiveTouch 设置为NO,这样您就可以确保这些都不会阻止触摸事件。
    【解决方案2】:

    在您的 UIImageView 上放置一个 UITapGestureRecognizer 并在委托中调用您提到的方法。像这样的:

    UITapGestureRecognizer* g = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageTapped:)];
    [img addGestureRecognizer:g];
    [g release];
    

    那么你的代表:

    -(void) imageTapped:(UITapGestureRecognizer*)tg
    {
        if(self.navigationController.toolbarHidden)
            [self.navigationController setNavigationBarHidden:YES animated:YES];
        else
            [self.navigationController setNavigationBarHidden:NO animated:YES];
    }
    

    【讨论】:

    • 感谢您的回复,但我发现委托方法从未被调用过。
    • 尝试在图像视图上启用用户交互。喜欢imageView.userInteractionEnabled = YES;
    【解决方案3】:

    如果您无法弄清楚其他答案,您可以稍微作弊。您可以将按钮设置为透明并使用代码将 IBAction 链接到它:

    UIButton *imageButton = [[UIButton alloc] initWithFrame:CGRectMake( x,y,0,0)];
    imageButton.backgroundColor = [UIColor clearColor];
    
    [imageButton addTarget:self action:@selector(navBarHide:) 
     forControlEvents:UIControlEventTouchUpInside];
    
    -(IBAction)navBarHide {
    if (!navBarHidden) {
    
    [self.navigationController.navigationBar removeFromSuperView];
    
    }
    else {
    
    [YourUIView addSubview: yourNavigationBar];
    
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多