我想在纵向模式下创建一个UISplitViewController,就像在Settings应用程序中一样.我该怎么做?
我在拆分视图的主窗格中使用了UISplitViewController一个UITabBarController带有plain 的内部,在详细信息窗格中使用了一个plain ,它本身包含一个vanilla .UIViewControllerUINavigationControllerUIViewController
我知道Apple建议仅在根级别使用拆分视图,但是我已经看到其他应用程序(例如,亚马逊 - "愿望清单"选项卡)在选项卡中使用拆分视图,因此我确信这是可能的.
我的问题是分割视图的委托方法,即.那些UISplitViewControllerDelegate没有被调用,这阻止我在切换到纵向模式时创建我的弹出菜单.
有问题的方法如下 -
// Called when a button should be added to a toolbar for a hidden view controller
- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc;
// Called when the view is shown again in the split view, invalidating the button and popover controller
- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem;
// Called when the view controller is shown in a popover so …Run Code Online (Sandbox Code Playgroud) 我正在创建一个带有splitview的iPad应用程序,这是屏幕截图,
在这一个中,当我更改masterview控制器(左侧)中的选项卡时,我想更新右侧tableview中的值.这将是一个很好的方法,我应该为每个标签更改加载另一个viewcontroller吗?可能吗?或者只是更新表格?对于所有选项卡更改,我想显示包含不同数据的tableview.我使用下面的代码,我可以看到日志中的更改,但表没有得到更新.
- (void)setDetailItem:(id)newDetailItem
{
if (_detailItem != newDetailItem) {
[_detailItem release];
_detailItem = [newDetailItem retain];
// Update the view.
[self configureView];
}
if (self.masterPopoverController != nil) {
[self.masterPopoverController dismissPopoverAnimated:YES];
}
}
- (void)configureView
{
// Update the user interface for the detail item.
if (isStudent) {
textStr = @"student";
NSLog(@"Student....%@",textStr);
[self.tableView reloadData];
}if (isTeachers) {
textStr = @"teacher";
NSLog(@"Teacher....%@",textStr);
[self.tableView reloadData];
}if (isPreference) {
textStr = @"preference";
NSLog(@"Preference....%@",textStr);
[self.tableView reloadData];
}if (isConfiguration) {
textStr = @"configuration";
NSLog(@"Configuration....%@",textStr);
[self.tableView reloadData]; …Run Code Online (Sandbox Code Playgroud) 我有一个基于UISplitViewController的应用程序,它在Split的MasterViewController中显示一个ActionSheet.在iOS 5.1之前,我在分割显示的弹出窗口中显示操作表没有任何问题,但现在,显然新的"滑入式"方式显示MasterController有问题.
问题在于,当我尝试使用任何[actionSheet show ..]方法呈现ActionSheet时,应用程序崩溃并出现以下错误(确切的断言如下).
*** Assertion failure in -[UIActionSheet presentSheetInPopoverView:], /SourceCache/UIKit_Sim/UIKit-1914.84/UIActionSheet.m:1816
sharedlibrary apply-load-rules all
Error in re-setting breakpoint 1:
Catchpoint 2 (throw)Error in re-setting breakpoint 1:
Error in re-setting breakpoint 1:
Current language: auto; currently objective-c
Run Code Online (Sandbox Code Playgroud)
我谷歌这一段时间,但没有实质性答案..有人说它可能是新的SplitViewController中的一个错误...
想法?
先感谢您!
更新:我发布了一个可能的通用解决方法,检查出来.如果它适合你,请发表评论....如果没问题,我会在几天后将其标记为正确
我有一个iPad应用程序,它使用UISplitViewController(左侧是UITableView,右侧是详细视图).点击它时,我的表格视图会以蓝色突出显示所选单元格.
当我调用以下方法时,单元格被选中但不以蓝色突出显示:
[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
Run Code Online (Sandbox Code Playgroud)
我花了很多时间来处理各种委托方法和黑客试图让单元格以编程方式突出显示,就好像它已被挖掘一样.我不能这样做.
我已经设法几乎到达那里:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (shouldHighlightCell)
{
NSIndexPath *indexPathForCellToHighlight = [NSIndexPath indexPathForRow:0 inSection:0];
if ([indexPath isEqual:indexPathForCellToHighlight])
{
cell.selected = YES;
shouldHighlightCell = NO;
}
}
}
Run Code Online (Sandbox Code Playgroud)
只要我也有这个功能,它就可以正常工作(否则即使在点击另一个单元时它仍保持选中状态):
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSIndexPath *ip = [NSIndexPath indexPathForRow:0 inSection:0];
if ([[self.tableView cellForRowAtIndexPath:ip] isSelected])
{
[[self.tableView cellForRowAtIndexPath:ip] setSelected:NO];
}
NSIndexPath *iToTheP = indexPath;
return iToTheP;
}
Run Code Online (Sandbox Code Playgroud)
我知道这是一个奇怪而复杂的解决方法.我不介意,但它甚至没有完全发挥作用.如果选定的单元格在屏幕上滚动,则会丢失其突出显示,而在屏幕上滚动时,已点击的单元格仍会突出显示.
我对这一点感到非常困惑.我确信这种解决方法甚至不是必需的,有一个更简单的解决方案.
我有一个简单的iPad应用程序,MasterviewController有一个tableview和一个包含UIWebView的DetailViewController.然后我在我的Storyboard中拖放了一个SplitViewController,将它与我的Master和Detail控制器连接起来.在MasterViewController中我使用以下内容:
- (void) awakeFromNib
{
self.splitViewController.delegate = self;
}
- (BOOL) splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation
{
return NO;
}
Run Code Online (Sandbox Code Playgroud)
目前看起来如下:

一切都很好.我想要做的是使用DetailViewController左上角的按钮隐藏和取消隐藏MasterViewController,就像iPad Mail应用程序一样.
我发现了一些与此问题相关的问题,但他们并没有像我一样只是在Storyboard中拖动它并编写几行代码来创建SplitView,所以不要将它标记为重复或类似的东西.
注意:请不要建议使用MGSplitViewController或任何其他第三方库.提前致谢.
MasterViewController嵌入在导航控制器中.虽然DetailViewController上面有一个手动添加的顶栏,因为当在SplitView中添加全部内容时,它会丢失顶部的导航栏.我所知道的是,我可以在DetailView的顶部栏上创建一个IBAction按钮,但不知道如何触发隐藏和取消隐藏功能.
我仍在尝试找到理论上非常简单的任务的解决方案,从UIViewController到Split View Controller.(为什么苹果这么难吃).
我现在处于一个阶段,我现在将SplitViewController放入自己的故事板中.当用户选择单个UIView控制器上的按钮时,我调用以下代码:
UISplitViewController *splitVC = [[UIStoryboard storyboardWithName:@"SplitStoryBoard" bundle:nil] instantiateViewController];
[self presentViewController:splitVC animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
所以我想用splitview控制器加载故事板.但这也与"应用程序试图以模态方式呈现拆分视图控制器"崩溃
我没有在代码中指定任何"模态"操作.
有没有解决方法怎么做?
我正在尝试创建一个应用程序,它将具有与iOS的设置应用程序类似的界面,我对如何继续有点迷失.
基本上,我计划使主视图成为静态表视图.并且该静态表视图中的每一行都有自己的详细视图控制器.
我目前通过故事板制作了我的主静态表视图.在点击时,如何使每一行显示详细视图中各自的详细视图控制器?我想知道在这种情况下进行的最佳方法是什么.
我通过网络浏览教程,但只看到动态主表视图,只有1个详细视图控制器教程.他们使用代理来连接左视图和右视图控制器.但至于我,我没有模型对象,因为我正在使用静态表视图.
我知道如何以编程方式执行此操作(连接左视图和右视图),但我计划使用故事板,因为我有多个静态表视图,这是我的主表视图中行的详细视图.我不知道怎么用故事板来做.
cocoa-touch objective-c storyboard ipad uisplitviewcontroller
在UISplitViewController折叠显示中,如何以编程方式返回主视图控制器?
我用谷歌搜索但没有找到解决办法.不确定我是否使用了正确的关键字.这是我显示详细视图控制器的方式:
[self showDetailViewController:[[UINavigationController alloc] initWithRootViewController:detail] sender:self];
Run Code Online (Sandbox Code Playgroud)
我也分别尝试了这3种方法,但没有一种方法有效:
if (self.splitViewController.collapsed) {
UIBarButtonItem *backButtonItem = self.navigationItem.leftBarButtonItem;
(1):[backButtonItem.target performSelector:backButtonItem.action];
(2):[[UIApplication sharedApplication] sendAction:backButtonItem.action to:backButtonItem.target from:nil forEvent:nil];
(3):objc_msgSend(backButtonItem.target, backButtonItem.action);
}
Run Code Online (Sandbox Code Playgroud)
导航项目设置如同详细信息VC viewDidLoad:
self.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem;
self.navigationItem.leftItemsSupplementBackButton = YES;
Run Code Online (Sandbox Code Playgroud) 如何检测UISplitViewController当前是仅显示1个视图控制器还是在双窗格中,并排显示2个视图控制器?
ipad ×6
ios ×5
objective-c ×3
uitableview ×2
cocoa-touch ×1
ios5.1 ×1
iphone ×1
storyboard ×1
swift ×1
xcode ×1