【问题标题】:UISplitView with multiple ViewControllers in DetailView (storyboard)UISplitView 与 DetailView 中的多个 ViewControllers(故事板)
【发布时间】:2014-03-17 18:55:26
【问题描述】:

我正在寻找一种解决方案,在 DetailView(UISplitView 的右视图)中有一个带有多个 ViewController 的 UISplitView。

苹果的例子工作正常,但使用 nib 文件而不是故事板。 (https://developer.apple.com/library/ios/samplecode/multipledetailviews/Listings/ReadMe_txt.html)

我找到了另一个例子,但是当我实现 UITableView 时有空格 http://www.dharmaworks.net/Consulting/switching-detail-views-in-uisplitviewcontroller-with-ios7

【问题讨论】:

    标签: ios uisplitviewcontroller xcode-storyboard detailview uisplitview


    【解决方案1】:

    在寻找答案的过程中,我发现很多人都有同样的问题。我自己想出来了,所以这是我的解决方案。我希望它对其他人有用。

    第 1 步。 创建一个 SplitViewController 项目。如果你有一个项目已经跳过这一步;)

    第 2 步。 添加两个不同的视图控制器。在这种情况下,我称它们为 AbcViewController 和 XyzViewController。

    第 3 步。 转到 ipad 情节提要,从情节提要中删除 DetailViewController。然后添加两个新的 viewController。

    第 4 步。 为您的 viewController 设置类和 Storyboard ID。

    第 5 步。 转到您的 MasterViewController.h 并将代码替换为以下代码。

    #import <UIKit/UIKit.h>
    
    @class AbcViewController;
    @class XyzViewController;
    
    @interface MasterViewController : UITableViewController
    
    @property (strong, nonatomic) AbcViewController *abcViewController;
    @property (strong, nonatomic) XyzViewController *xyzViewController;
    
    @end
    

    第 6 步。 现在转到您的 MasterViewController.m 文件并替换为以下代码:

    注意:如果您有一个现有项目并且不想替换,请使用第 7 步中的代码。

    #import "MasterViewController.h"
    #import "DetailViewController.h"
    
    @interface MasterViewController () {
        NSMutableArray *_objects;
    }
    @end
    
    @implementation MasterViewController
    
    - (void)awakeFromNib
    {
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
            self.clearsSelectionOnViewWillAppear = NO;
            self.preferredContentSize = CGSizeMake(320.0, 600.0);
        }
        [super awakeFromNib];
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        self.detailViewController = (DetailViewController*)[[self.splitViewController.viewControllers lastObject] topViewController];
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    #pragma mark - Table View
    
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 1;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return 2;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    
        if (indexPath.row == 0) {
            cell.textLabel.text = @"ABC";
        }
        if (indexPath.row == 1) {
            cell.textLabel.text = @"XYZ";
        }
    
        return cell;
    }
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        self.abcViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ABC"];
        self.xyzViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"XYZ"];
        if (indexPath.row == 0) {
            NSArray *newVCs = [NSArray arrayWithObjects:[[[self splitViewController ] viewControllers ] firstObject ] , self.abcViewController, nil];
            self.splitViewController.viewControllers = newVCs;
        }
        if (indexPath.row == 1) {
            NSArray *newVCs = [NSArray arrayWithObjects:[[[self splitViewController ] viewControllers ] firstObject ] , self.xyzViewController, nil];
            self.splitViewController.viewControllers = newVCs;
        }
    }
    
    @end
    

    第 7 步。

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
        {
            self.abcViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ABC"];
            self.xyzViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"XYZ"];
    
            if (indexPath.row == 0) {
                NSArray *newVCs = [NSArray arrayWithObjects:[[[self splitViewController ] viewControllers ] firstObject ] , self.abcViewController, nil];
                self.splitViewController.viewControllers = newVCs;
            }
            if (indexPath.row == 1) {
                NSArray *newVCs = [NSArray arrayWithObjects:[[[self splitViewController ] viewControllers ] firstObject ] , self.xyzViewController, nil];
                self.splitViewController.viewControllers = newVCs;
            }
        }
    

    就是这样,运行您的项目并享受吧:)

    【讨论】:

      猜你喜欢
      • 2013-10-11
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2012-09-30
      • 1970-01-01
      • 2014-01-23
      相关资源
      最近更新 更多