1

我有一个类似于 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 之间正确.. 并且我阅读的文档似乎遵循我尝试过的内容。

4

2 回答 2

1

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

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

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

 @implementation PhotoScrollViewController

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

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

于 2010-01-18T21:01:26.353 回答
1

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

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

于 2011-03-13T21:14:24.693 回答