2014-01-09 96 views
2

我知道这个问题已被许多用户询问,但我没有找到任何与我的问题有关的答案。隐藏和取消隐藏masterView从按钮的详细信息查看

我使用UISplitViewController,我的应用程序启动与登录页面,所以我必须隐藏在启动masterView,后DetailViewController一段时间我表明,使用委托方法主viewController

- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation NS_AVAILABLE_IOS(5_0) 
{ 
    return hideMaster; 
} 

我已经初始化hideMasterNO,和我的viewDidLoad(的DetailViewController)低于

ViewDidLoad(){ 

[self.splitViewController.view setNeedsLayout]; 
    self.splitViewController.delegate =Nil; 
    self.splitViewController.delegate = self; 

    [self.splitViewController willRotateToInterfaceOrientation:[UIApplication sharedApplication].statusBarOrientation duration:0]; 
    [super viewDidLoad]; 
} 

它工作得很好,现在我的主人是unhide.But在同一detailViewController我上有一个后退按钮我弹出当前ViewController到最后viewController,再次我想隐藏masterViewController我的代码为后退按钮是在下面。

- (IBAction)back:(id)sender { 




hideMaster = NO; 

self.splitViewController.delegate =Nil; 
self.splitViewController.delegate = self; 

[self.splitViewController willRotateToInterfaceOrientation:[UIApplication sharedApplication].statusBarOrientation duration:0]; 


    [self.navigationController popViewControllerAnimated:NO]; 
} 

其坡平的CurrentViewController持续ViewController,但它不是隐藏masterViewController

请帮助我。

回答

2

@ JohnD,我浏览了你的代码。你在隐藏主视图控制器的同时弹出最后一个View控制器,但是你正在浏览的viewController仍然显示主控ViewController.therefore你的masterView仍然存在。

按照下面给出的步骤。

1.将UInavigationController制作成UInavigationController这是您的最后一个单视图控制器的ViewController。

2.最后一个单独的ViewController(它是UINavigationController的委托)实现下面的委托方法。

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
[self.splitViewController.view setNeedsLayout]; 
    self.splitViewController.delegate =Nil; 
    self.splitViewController.delegate = self; 

    [self.splitViewController willRotateToInterfaceOrientation:[UIApplication sharedApplication].statusBarOrientation duration:0]; 
} 

3.现在在下面给出的方lastViewController中实现UISplitViewController的委托方法。

- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation NS_AVAILABLE_IOS(5_0) 
{ 
    return hideMaster;<<===============I'm assuming hide master as a variable of shared object(Singleton). 
} 

4.现在改变你的 - (IBAction)返回:(id)发送方法和下面的方法。

- (IBAction)back:(id)sender { 




hideMaster = Yes; 




    [self.navigationController popViewControllerAnimated:NO]; 
} 

我希望这会工作,如果你卡住了一些地方,请让我知道。

+0

wali,你是什么意思最后一个单一的ViewController和“我假设隐藏主人作为共享对象(单身人士)的变量”? –

+0

LastSingleViewController是一个ViewController,在此之后,您将在应用程序中显示masterViewController,并且假设您使用hidMaster变量作为共享对象的成员变量意味着一个单例对象,因为如果您将hideMaster的值更改为NO弹出viewController它应该反映在以前的viewController上 –

+0

非常感谢@ wali –

1

您在应用程序内部使用UISplitViewController,因为您有很多视图,但是整个应用程序没有使用UISplitViewController只有一个使用它的视图。

它更好地使用另一种方法。