我有一个UITabBarController应用程序,其中一个选项卡显示应用程序设置。这是一个UISplitViewController,它有多个细节控制器,根据master上选择的内容进行更改。我的detailViewControllers有这些行,允许主视图不断显示(或应该):
- (void)viewDidLoad
{
[super viewDidLoad];
self.splitViewController.delegate = self;
}
- (BOOL) splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation {
return NO;
}
这是我的问题:如果在点击设置选项卡时垫是纵向的,则只显示初始详细视图。不是主人。将垫子旋转到横向和背面,主人表现得很好并且留在那里。
我无法弄清楚为什么会这样。更新detailController后,XCode 4.5.2主/详细模板项目没有出现此问题。
有什么想法吗?
答案 0 :(得分:3)
我遇到了同样的问题,但通过仔细检查我的UISplitViewController委托是否在适当的时间设置来计算出来。
注意在XCode示例项目的AppDelegate中完成的工作正常:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
splitViewController.delegate = (id)navigationController.topViewController;
}
return YES;
}
它专门将UISplitViewController委托设置为特定的视图控制器。
出于我的目的,我将AppDelegate设置为SplitViewControllerDelegate,因为我在SplitViewController中有一些稍微复杂的viewcontroller管理。
因此,请确保代理在应用程序中正确设置:didFinishLaunchingWithOptions:您应该没有问题。
答案 1 :(得分:1)
要解决这个问题,我必须使用原始问题中使用的相同代码,但将其放入子类UISplitViewController中。最初我把它放在详细视图中。
答案 2 :(得分:0)
我发现这个问题的简单方法是确保AppDelegate具有方向委托:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
答案 3 :(得分:0)
我知道现在为时已晚,但我想表明我是如何摆脱这种情况所以其他人可以从中受益。
- (IBAction)hideMaster
{
// 1. set desired width for master view
[self.splitViewController setValue:[NSNumber numberWithFloat:0.0] forKey:@"_masterColumnWidth"];
// 2. splitViewController delegate to self
self.splitViewController.delegate = self;
// 3. give a smooth animation
[UIView animateWithDuration:1.0 animations:^{
[self.splitViewController.view layoutSubviews];
}];
}
- (BOOL)splitViewController: (UISplitViewController*)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
{
return NO;
}