【问题标题】:Manually creating a Split View layout without using UISplitViewController不使用 UISplitViewController 手动创建拆分视图布局
【发布时间】:2012-10-09 14:55:34
【问题描述】:

我正在深入研究 iOS 开发,我正在尝试创建一个使用拆分视图布局的 iPad 应用程序,而不使用 UISplitViewController。我发现 this question 已经发布,但它太模糊了,无法帮助我了解我目前的 iOS 体验水平。

简而言之,我有一个名为 MySplitViewController 的 UIViewController 类,它包含两个子视图控制器,一个用于主视图,一个用于详细视图。我试图以这样一种方式实现这一点,即当我将 MySplitViewController 的一个实例推送到导航堆栈上时,我在左侧得到一个表视图(主视图),在左侧得到一个详细视图。但是,当我运行我的代码时,整个拆分视图都充满了表格视图。如何手动创建拆分视图布局?这是我的三个视图控制器类,它们非常简单......

MySplitViewController.m

#import "MySplitViewController.h"
#import "MasterViewController.h"
#import "DetailViewController.h"

@interface MYSplitViewController (){}

@property (nonatomic, strong) MasterViewController *masterViewController;
@property (nonatomic, strong) DetailViewController *detailViewController;

@end

@implementation MySplitViewController

- (id)initWithCoder:(NSCoder *)aDecoder{
    self = [super initWithCoder:aDecoder];
    if (self) {
      self.masterViewController = [[MasterViewController alloc] initWithNibName:nil bundle:nil];
      self.detailViewController = [[DetailViewController alloc] initWithNibName:nil bundle:nil];
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.frame = CGRectMake(0, 0, 768, 1004);
    [self.view addSubview:self.masterViewController.view];
    [self.masterViewController viewDidLoad];
    [self.view addSubview:self.detailViewController.view];
    [self.detailViewController viewDidLoad];
}

@end

MasterViewController.m

#import "MasterViewController.h"

@interface MasterViewController ()

@end

@implementation MasterViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    UITableView *table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 100, 1004) style:UITableViewStylePlain];
    table.dataSource = self;
    table.delegate = self;
    [self.view addSubview:table];
}

@end

DetailViewController.m

#import "DetailViewController.h"

@interface DetailViewController ()

@end

@implementation DetailViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    UIView *uiview = [[UIView alloc] initWithFrame:CGRectMake(100, 0, 668, 1004)];
    [self.view addSubview:uiview];
}

@end

我不明白什么?

非常感谢您的智慧!

附:值得注意的是为什么我不使用 UISplitViewController。我的应用程序当前设计为根视图不是拆分视图。我的应用程序的根视图将导致拆分视图被推送到导航堆栈。问题在于 UISplitViewController 被设计为应用程序的根视图,Apple 的文档特别指出,如果您使用 UISplitViewController,它需要成为根视图。因此,我正在实现自己的拆分视图并手动管理视图。

【问题讨论】:

  • 我现在更了解你的其他问题了 :)

标签: iphone ios ipad ios5


【解决方案1】:

也许考虑以不同的方式显示您的根视图可能会对您有所帮助。例如,像这样:使用UISplitViewController 作为根视图,并在其顶部显示一个模态视图以及您当前的根视图。所以你使用你当前的根视图和UISplitViewController

【讨论】:

  • 这是一个有趣的方法,谢谢 Pfitz!过渡动画怎么样?如果我将当前的根视图呈现为模态视图,我是否可以使用看起来像是正在将拆分视图推入堆栈的动画来动画到拆分视图(实际根视图)的过渡?
  • 还没有在非标准动画中使用这种技术,但我认为可以通过视图控制器的modalTransitionStyle 属性来实现
【解决方案2】:

您可能想尝试同样基于 UIViewController.. 并允许推送的 MGSplitViewController..MGSplitViewController

【讨论】:

  • 感谢 AppleDelegate!但是,价格(199 美元)有点超出我的承受范围,而且我的应用程序需要非署名许可。关于我在当前方法中做错了什么的任何提示?
猜你喜欢
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
相关资源
最近更新 更多