XCode iPhone:从子UIScrollView中隐藏UIToolbar在父UIViewController中

时间:2010-01-18 20:05:46

标签: iphone xcode uiviewcontroller uiscrollview uitoolbar

我有一个类似于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之间正确地进行通信..我阅读的文档似乎遵循了我的尝试。

2 个答案:

答案 0 :(得分:1)

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

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

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

 @implementation PhotoScrollViewController

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

如果你的photoViewController参考是零,这可能不起作用的唯一方法。你在哪里/如何设置它?

答案 1 :(得分:1)

[photoViewController.navigationController setToolbarHidden:YES animated:NO];

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