我正在学习 objective-c 。现在,我使用UISplitViewController和“显示/隐藏主视图”按钮来玩。我看过很多教程,但是做错了什么,我不知道这是什么。我的按钮没有隐藏主视图。我绝对在两天内就下定决心。现在,我构建了这个示例项目,以征求您的建议。
在我的模式中,我有:TabBarVC,SplitVC,TableViewVC和ViewVC。所有控制器都是我的习惯。
MyTabBarViewController首先出现。我有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外部显示/隐藏主视图按钮,例如在某些视图上?

现在我知道了-(void)splitViewController(UISplitViewController *)svc willHideViewController和-(void)splitViewController(UISplitViewController *)svc willShowViewController在iOS8中已弃用。

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

最佳答案

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

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

我有一个类似的问题,对我来说,我可以通过仅使用Master-Detail Application模板创建项目来解决此问题。它默认带有show / button和- (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];
}

这应该工作。

关于ios - iOS:UISplitViewController显示/隐藏主 View 按钮不起​​作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28701675/

10-11 23:17