我有一个UISplitViewController,它包含一个UITabBarController作为主视图.这个UITabBarController包含一个UINavigationController.详细视图也包含UINavigationController.
在iPad上,这可以按预期工作.的节目详细赛格瑞呈现在详细视图中导航控制器内的ImageView的.
另一方面,在iPhone上,我预计show detail segue会在主视图的导航控制器的堆栈上推送详细视图.但实际上它是在主视图上以模态方式呈现的.
从故事板中删除UITabBarController并直接在主视图中使用UINavigationController时,这可以正常工作.
有谁知道如何在iPhone上的主人UINavigationController堆栈上呈现详细视图?
iphone uitabbarcontroller uinavigationcontroller uisplitviewcontroller ios8
我无法在任何地方找到一个好的答案.我正在为我的iPhone应用程序使用UINavigationController,所有内容都是以编程方式生成的,Interface Builder中没有任何内容.我正在尝试使用UISplitViewController和我现有的UINavigationController将我的应用程序移植到iPad,但我不确定我的程序逻辑应该分离iPhone或iPad的视图控制器.
我是否将主文件设置为使用其他应用程序委托,还是使用相同的应用程序委托并在其中有条件地设置用户界面?
除此之外,每当我尝试在模拟器上编译我的应用程序时,它都无法识别UISplitViewController甚至是我检查类是否存在的条件.
可以请有人把我放在正确的方向,记住我没有使用任何xibs?
可能重复:
像iPhone上的Facebook应用程序一样
另一个突破.net开发人员现在试图习惯IOS的世界.
我喜欢新的Facebook iPhone应用程序的布局(2011年10月),并希望在我正在做的应用程序中实现类似的东西.我知道UISplitterControl在iPhone上不可用,但Facebook似乎已经有点神奇,让它在新的应用程序中显示出来.
在Facebook的实现中,它看起来他们使用了一个UINavigationController,当点击NavigationBar图标时,它会向右滑动x,从而用菜单项公开下面的视图.
如果有人可以帮助我解决这个问题,我将不胜感激,因为解决方案也是一个很好的学习曲线.
我已经尝试将UINavigationController设置为AppDelegate窗口根视图控制器,然后使用initwithframe加载自定义视图,其中包含菜单项作为隐藏在UINavigationcontroller根视图后面的子视图.然后当单击UINavgationController菜单项按钮时,将NavigationController向右滑动,从而使下面的视图显示菜单项.这提出了两个问题,首先是子视图定位不起作用,以及如何将实际的UINavigationController向右滑动公开下面的菜单视图.
请帮忙!
iphone facebook uinavigationcontroller uisplitviewcontroller ios
正如在SO上的其他问题中所报告的那样,iOS 5根据此发行说明更改了拆分视图控制器的旋转回调的发送方式.这不是一个骗局(我认为),因为我无法找到关于如何在iOS 5中调整拆分视图控制器使用以应对更改的另一个问题:
iOS 5中的旋转回调不适用于通过全屏显示的视图控制器.这意味着,如果你的代码呈现了另一个视图控制器视图控制器,然后用户随后旋转设备,以不同的取向,在解雇,底层控制器(即呈现控制器)将不会收到任何旋转回调.但请注意,呈现控制器在重新显示时将接收viewWillLayoutSubviews调用,并且可以从此方法查询interfaceOrientation属性并用于正确布局控制器.
我在根分割视图控制器中配置弹出窗口按钮时遇到问题(当你在肖像中时,应该在弹出框中显示左窗格视图).以下是当设备处于横向模式时,我的应用启动序列在iOS 4.x中的工作方式:
将拆分视图控制器安装到窗口中[window addSubview:splitViewController.view]; [window makeKeyAndVisible];
.这导致在splitViewController:willHideViewController:withBarButtonItem:forPopoverController:
委托上调用(即模拟横向 - >纵向旋转),即使设备已处于横向模式.
呈现全屏模式(我的加载屏幕),它完全覆盖下面的分割视图.
完成加载并关闭加载屏幕模式.由于设备处于横向模式,因此在显示分割视图控制器时,这会导致splitViewController:willShowViewController:invalidatingBarButtonItem:
在代理上调用(即模拟纵向 - >横向旋转),从而使条形按钮项无效,将其从右侧移除拆分视图,留下我们想要的地方.万岁!
因此,问题在于,由于该发行说明中描述的更改,iOS 4.3内部发生的任何事情都会导致splitViewController:willShowViewController:invalidatingBarButtonItem:
被调用不再发生在iOS 5中.我尝试了子类化UISplitViewController,因此我可以提供自定义的实现,viewWillLayoutSubviews
如发行说明,但我不知道如何重现iOS 4触发的所需内部事件序列.我试过这个:
- (void) viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
UINavigationController *rightStack = [[self viewControllers] objectAtIndex:1];
UIViewController *rightRoot = [[rightStack viewControllers] objectAtIndex:0];
BOOL rightRootHasButton = ... // determine if bar button item for portrait mode is there
// iOS 4 never goes inside this 'if' branch
if (UIInterfaceOrientationIsLandscape( [self interfaceOrientation] ) …
Run Code Online (Sandbox Code Playgroud) 与UISplitViewController
应用程序相关的iOS 5.1中的新行为似乎是拦截UISlider
动作并产生不良结果.这也可能适用于UISegmented
控件和处理从左到右手势的任何其他控制界面.
随着UISplitView
在纵向,则主视图通常是隐藏的.从iOS 5.1开始,右侧滑动屏幕会显示设备左侧的主视图.问题是,滑动我的UISlider控件的拇指被误解为屏幕滑动:如果我向右侧的UISlider拇指急剧推动,则弹出主面板.
在我的应用程序中,有不良的副作用(和性能问题),使主视图更加明亮.
我认为这种行为是一个Apple bug.任何想法如何解决它?我可以以某种方式UISlider
捕获手势并处理它,而不是将它传递给响应者链吗?
提前感谢任何见解!
我目前正在开发iOS 8并使用新的自适应框架开发应用程序.奇怪的是当我使用iPhone上的splitviewcontroller与这个故事板配置时,应用程序不是从主视图控制器开始,而是从细节控制器开始.这是一个错误,我怎么能修复它?
只有当包含master的navigationController存在时才会发生这种情况,如果我将其删除,应用程序将以主控制器启动.
在我的UISplitViewController中,主视图是一个包含UITableViewController的UINavigationController.有时,当用户选择表中的项时,我必须在主视图中的现有表上推送另一个tableViewController.
在iOS 7中,在我的第一个UITableViewController中,我只是调用它
[self.navigationController pushViewController:otherTableVC animated:YES];
Run Code Online (Sandbox Code Playgroud)
在iOS 8中:
折叠拆分视图时,otherTableVC将成为详细视图!旋转设备后,我们并排看到两张桌子......
更糟糕的是,如果设备显示两个窗格,代码工作得很好,第二个表被推到主视图中的第一个表.但是,经过两次旋转后,两张桌子又是并排的.似乎UISplitViewController的折叠模式干扰了我自己的导航控制器......
如何在主视图中管理自己的UINavigationController?
谢谢
编辑:
我的主视图和详细信息视图都有一个导航控制器.为了解决我的问题,我刚刚发现,在折叠模式下,我必须创建一个额外的导航控制器并将其推送到主导航控制器上.
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:otherTableVC];
[self.navigationController pushViewController:navController animated:YES];
Run Code Online (Sandbox Code Playgroud)
所以我发现帽子我们可以将导航控制器推到另一个导航控制器中.
因此,当我在SwiftUI中列出列表时,会获得“免费”的主从详细信息拆分视图。
因此,例如:
import SwiftUI
struct ContentView : View {
var people = ["Angela", "Juan", "Yeji"]
var body: some View {
NavigationView {
List {
ForEach(people, id: \.self) { person in
NavigationLink(destination: Text("Hello!")) {
Text(person)
}
}
}
Text("")
}
}
}
#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
Run Code Online (Sandbox Code Playgroud)
如果iPad模拟器在横向,并且第一个详细信息屏幕是表情符号,我会得到splitView。但是,如果人们点击名称,则详细信息视图为“ Hello!”。
一切都很棒。
但是,如果我以纵向方式运行iPad,则表情符号会向用户表示欢迎,然后就不会显示列表。您必须从左向右滑动才能使列表从侧面显示。
有谁知道一种显示导航栏的方法,该导航栏可以让用户点击以查看左侧的项目列表?因此,它不是仅带有表情符号的屏幕吗?
我不愿意留下一个注释,上面写着“从左侧扫入以查看文件/人员/所有内容的列表”
我记得UISplitViewController有一个可以设置的折叠属性。这里有这样的东西吗?
我正在构建我的第一个iPad应用程序.我的一个要求是处理UISplitviewcontroller和UINavigationController.
我们提出的视图层次结构是
(LoginView) - > UINavigationView(LandingView + CollectionView) - > UISplitViewcontroller(DetailsView).
我们的应用程序仅支持横向模式
我指的是这个SO问题(以及GILT应用程序),作为newbi,我很难根据该描述完成它.
所以我的问题是
1)如果有人可以提供小代码片段或参考教程,我怎么能实现同样的事情
2)根据Apples HIG,UISplitviewcontroller应该是rootviewcontroller,如果不是.Apple会拒绝我的应用程序吗(显然GILT小组已被批准)
3)我找到了MGSplitViewController,我可以使用那个不是root吗?
任何帮助,将不胜感激.作为newbi,我希望我的问题是真实的
我是使用拆分视图创建iPad应用程序的新手.当我第一次使用标准的MasterDetail应用程序模板(Xcode 4.2)创建项目时,它会创建一个MasterViewController和一个DetailViewController.从弹出表(主详细信息视图控制器)中选择行时,模板具有以下方法:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
if (!self.detailViewController)
{
self.detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
}
[self.navigationController pushViewController:self.detailViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)
现在我明白当你使用常规导航控制器时,如果你正在为iPhone编程,你只需要做这种类型的事情就可以将另一个视图控制器推到堆栈上.但是,使用此模板,它只是将详细信息视图推送到弹出窗口而不是更新已存在的内容.我很困惑,因为我需要更新以从弹出窗口中选择一些内容(主详细信息视图),然后进行detailView更新.
更新:
为了尝试测试已在DetailViewController中为您设置的"detailItem",我注释掉了pushViewController并添加了以下内容:
//[self.navigationController pushViewController:self.detailViewController animated:YES];
self.detailViewController.detailItem = @"Test";
// setter in detailViewController
- (void)setDetailItem:(id)newDetailItem
{
if (_detailItem != newDetailItem) {
_detailItem = newDetailItem;
// Update the view.
[self configureView];
}
if (self.masterPopoverController != nil) {
[self.masterPopoverController dismissPopoverAnimated:YES];
}
}
- (void)configureView
{
// Update the user interface for the detail item.
// detailDescriptionLabel.text is a IBOutlet to the label …
Run Code Online (Sandbox Code Playgroud) ios ×5
iphone ×4
ios8 ×2
ipad ×2
objective-c ×2
cocoa-touch ×1
facebook ×1
ios5 ×1
ios5.1 ×1
rotation ×1
swiftui ×1
uisplitview ×1
xcode ×1