2015-02-24 90 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