2015-02-24 65 views
1

我正在学习目标C.现在我对UISplitViewController和显示/隐藏主视图按钮很好奇。我看过很多教程,但我做错了什么,我不知道它是什么。我的按钮不隐藏主视图。我在两天内绝对打破了我的想法。现在我构建了这个示例项目来询问您的建议。 在我的模式中我有:TabBarVC,SplitVC,TableViewVC和ViewVC。所有控制器都是我的习惯。 MyTabBarViewController首先来临。我有与UISplitViewController选项卡。iOS:UISplitViewController显示/隐藏主视图按钮不起​​作用

MySplitViewController.m

#import "MySplitViewController.h" 
#import "MyTabBarViewController.h" 
#import "MyDetailViewController.h" 

@interface MySplitViewController() 

@end 

@implementation MySplitViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    MyTabBarViewController *masterVC = [self.storyboard instantiateViewControllerWithIdentifier:@"myTableVC"]; 
    MyDetailViewController *detailVC = [self.storyboard instantiateViewControllerWithIdentifier:@"myDetailVC"]; 

    NSArray *newViewControllersArray = [NSArray arrayWithObjects:masterVC, detailVC, nil]; 

    self.viewControllers = newViewControllersArray; 

} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
} 


@end 

MyTableViewController.m

#import "MyTableViewController.h" 

@interface MyTableViewController() 

@end 

@implementation MyTableViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.dataArray = [[NSArray alloc] initWithObjects:@"1", @"2", nil]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
} 

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [self.dataArray count]; 
} 

//configure the cell 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myCell"]; 

    cell.textLabel.text = [self.dataArray objectAtIndex:indexPath.row]; 

    return cell; 
} 

@end 

MyDetailViewController.h

#import <UIKit/UIKit.h> 

@interface MyDetailViewController : UIViewController <UISplitViewControllerDelegate> 
@property (weak, nonatomic) IBOutlet UIBarButtonItem *showHideMasterVC; 
@property (nonatomic, strong) UIPopoverController *popover; 

@end 

MyDetailViewController.m

#import "MyDetailViewController.h" 

@interface MyDetailViewController() 

@end 

@implementation MyDetailViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(void)splitViewController:(UISplitViewController *)svc 
    willHideViewController:(UIViewController *)aViewController 
     withBarButtonItem:(UIBarButtonItem *)barButtonItem 
     forPopoverController:(UIPopoverController *)pc 
{ 
    //Grab a reference to the popover 
    self.popover = pc; 
} 

-(void)splitViewController:(UISplitViewController *)svc 
    willShowViewController:(UIViewController *)aViewController 
invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem 
{ 
    //Nil out the pointer to the popover. 
    _popover = nil; 
} 

@end 

这是我的整个项目与故事板:MyProject

对不起,很多代码,但请帮助我或我疯了。谢谢! PS顺便说一下,有可能在NavigationController之外显示/隐藏主视图按钮,例如在某些视图上? (无效)splitViewController(UISplitViewController *)svc willHideViewController和 - (void)splitViewController(UISplitViewController *)svc willShowViewController在iOS8中已弃用。

那么有人可以纠正我的项目我应该怎样解决我的问题?

回答

2

我认为最简单的方法是在您的MyDetailViewController viewDidLoad中添加self.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem;。这将显示显示/隐藏MasterDetailViewController按钮。

而您的- (void)splitViewController(UISplitViewController *)svc willHideViewController- (void)splitViewController(UISplitViewController *)svc willShowViewController已在iOS8中弃用。

我有一个类似的问题,对我而言,我通过简单地使用Master-Detail Application模板创建项目来解决这个问题。它带有显示/按钮和- (BOOL)splitViewController:(UISplitViewController *)splitViewController collapseSecondaryViewController作为默认值。如果您使用TabBarViewController作为rootViewController,那么您可能需要将其设置为applicationDidFinishLaunchingWithOptions中的rootViewController。希望这将有助于解决您的问题。

编辑:

PS顺便说是有可能有NavigationController外部显示/隐藏主视图按钮,在某些视图例如?

首先在故事板中创建一个UIButton。将它连接到IBAction。

- (IBAction)buttonAction:(id)sender { 

self.splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryOverlay; 
[self.splitViewController.displayModeButtonItem action]; 
} 

这应该起作用。

+0

嗨!对不起,我没有明白你的观点,我应该如何做到这一点,而不使用废弃的方法? – user3742622 2015-02-24 21:15:00

+0

您不需要弃用的方法。只需添加'self.navigationItem.leftBarButtonItem = self.splitViewController。displayModeButtonItem;'。 – SFF 2015-02-24 21:18:46

+0

哇!它是如此容易!非常感谢!!! – user3742622 2015-02-24 21:25:11