【问题标题】:Hide and Unhide masterView from button press of detailView从 detailView 的按钮按下隐藏和取消隐藏 masterView
【发布时间】:2014-01-09 06:44:47
【问题描述】:

我知道很多用户都问过这个问题,但是我没有找到任何与我的问题相关的答案。

我正在使用UISplitViewController,我的应用程序从登录页面开始,所以我在启动时隐藏了masterView,在DetailViewController 上一段时间后,我使用Delegate 方法显示了主viewController

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

我已将 hideMaster 初始化为 NO ,我的 DetailViewController 的 ViewDidLoad() 如下

ViewDidLoad(){

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

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

它工作得很好,我的主人现在取消隐藏了。但是在同一个 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

请帮帮我。

【问题讨论】:

    标签: ios iphone ipad uisplitviewcontroller


    【解决方案1】:

    @JohnD,我浏览了您的代码。您在弹出最后一个视图控制器时隐藏了主视图控制器,但您正在导航的视图控制器仍在显示主视图控制器。因此您的主视图仍然存在。

    按照下面给出的步骤。

    1.make delegate of UInavigationController 到那个 ViewController,它是你的最后一个 singleView 控制器。

    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)back:(id)sender 方法更改为以下一个。

    - (IBAction)back:(id)sender {
    
    
    
    
    hideMaster = Yes;
    
    
    
    
       [self.navigationController popViewControllerAnimated:NO];
    }
    

    我希望这会奏效,如果你卡在哪里请告诉我。

    【讨论】:

    • wali,最后一个 ViewController 和“我假设隐藏 master 作为共享对象(单例)的变量”是什么意思?
    • LastSingleViewController 是一个 ViewController,之后您将在应用程序中显示 masterViewController,并且我假设您使用 hidMaster 变量作为共享对象的成员变量意味着单例对象,因为如果您更改弹出 viewController 时 hideMaster 的值为 NO 它也应该反映在以前的 viewController 上
    • 非常感谢@wali
    【解决方案2】:

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

    最好使用其他方法。

    【讨论】:

      猜你喜欢
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      相关资源
      最近更新 更多