【问题标题】:XCode iPhone: hiding UIToolbar in parent UIViewController from child UIScrollViewXCode iPhone:从子 UIScrollView 隐藏父 UIViewController 中的 UIToolbar
【发布时间】:2011-01-06 12:37:41
【问题描述】:

我有一个类似于 Apple 的 PageControl 示例的项目。我有一个 UIViewController “PhotoViewController”,它包含一个 UIScrollView 和一个 UIToolbar。 UIScrollView 加载另一个 XIB 和 UIViewController “PhotoScrollViewController”。

在 PhotoScrollViewController 中,我有一个显示图像的 UIButton。我在这个按钮上有一个 IBAction,我想点击它来显示/隐藏 PhotoViewController 中的 UIToolbar。

在 PhotoViewController.h 我有

@interface PhotoViewController : UIViewController <UIScrollViewDelegate> {
  IBOutlet UIToolbar *toolBar;
  ..
}

@property (nonatomic, retain) UIToolbar *toolBar;

我在 PhotoScrollViewController 中尝试了一些东西,例如在 PhotoScrollViewController.h 中导入 PhotoViewController.h 并将其添加到界面中,然后尝试通过我的函数访问它,例如:

@implementation PhotoScrollViewController

- (IBAction)toggleMenu {
  photoViewController.toolBar.hidden = NO;
}

但这不起作用。我也尝试过 removeFromSuperView、self.parentViewController 和其他一些东西。我不知道如何隐藏这个工具栏(我也试过 alpha,我根本无法访问工具栏)。

我尝试使用 toolBar.hidden = YES 向 PhotoViewController 添加一个函数。如果我从 PhotoViewController 执行该功能,这将有效,但如果我从 PhotoScrollViewController 访问它(在 .h 中使用 PhotoViewController *photoViewController),则它不起作用:

@implementation PhotoScrollViewController

- (IBAction)toggleMenu {
  photoViewController.toolBar.hidden = NO;
  [photoViewController toggleTopMenu];
  [[PhotoViewController alloc] toggleTopMenu];
}

@implementation PhotoViewController

- (IBAction)toggleTopMenu {
  toolBar.hidden = NO;
}

我也尝试将工具栏添加到 PhotoScrollViewController,我可以切换它,但我不知道如何告诉主 UIViewController 关闭 PhotoViewController...所以无论我用哪种方式解决这个问题,我都不知道如何在 UIViewControllers 之间正确通信.. 并且我阅读的文档似乎遵循我的尝试。

【问题讨论】:

    标签: iphone xcode uiviewcontroller uiscrollview uitoolbar


    【解决方案1】:

    基本上,您的问题似乎是您无法从另一个控制器引用一个控制器。这可以通过多种方式完成。

    1:加载应用程序时在应用程序委托中创建控制器,并公开对它们的引用,例如作为委托的属性。

    2:在创建或显示 PhotoScrollViewController 时传递对 PhotoViewController 的引用。你说这行不通:

     @implementation PhotoScrollViewController
    
     - (IBAction)toggleMenu {
         photoViewController.toolBar.hidden = YES;
     }
    

    如果您的 photoViewController 引用为 nil,则唯一的方法可能不起作用。你在哪里/如何设置它?

    【讨论】:

    • 我在 PhotoScrollViewController.h 中引用 photoViewController 为:#import #import "PhotoViewController.h" @interface PhotoScrollViewController : UIViewController { PhotoViewController *photoViewController; } @end
    • photoViewController==nil 是真的,所以这一定是我的问题。
    • 正如我在回复中所说,您需要以某种方式设置参考。尝试在您 [[PhotoScrollViewController alloc] init...] 或类似的东西之后分配它。 PhotoViewController 需要公开为 @property
    • 我只是通过在 IB 中添加一个视图控制器来设置引用,并在 PhotoScrollViewController.h 中创建一个@property 并将它们链接到 IB 中。 photoViewController 不再是 nil,我可以通过 NSLog 验证我可以在 PhotoViewController 中执行一个函数。除非我从 PhotoViewController 中的按钮执行它,否则 PhotoViewController 中的 toolBar.hidden = NO 仍然无效。我可以在使用 [[PhotoViewController alloc] toggleTopMenu]; 之前得到这个。我真的不知道从这里做什么。 photoViewController.toolBar.hidden = NO 也不起作用,即使在设置了引用之后也是如此。
    • 也刚试过 PhotoViewController *theController = [[PhotoViewController alloc] init]; theController.toolBar.hidden = NO;仍然没有效果。不知道我在这里做错了什么。我的工具栏不可用吗?我是否需要正确设置 @property (nonatomic, retain) UIToolbar *toolBar;
    【解决方案2】:

    [photoViewController.navigationController setToolbarHidden:YES 动画:NO];

    仅当 photoViewController 被推入 UINavigationController 时才有效。否则,设置 toolBar.hidden=YES。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2012-05-13
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多