我的应用程序在iOS 5.1之前完美运行.这是一个UISplitviewController用UINavigationController在左侧窗格中,并更新取决于内作出的选择详细信息窗格UINavigationController.
从左侧替换弹出的新的滑入,iOS 5.1特有的工作; 它看起来不太好,但它确实有效.
似乎被打破的是从纵向按钮显示"弹出".它会导致异常 - 'NSInternalInconsistencyException', reason: 'Unknown direction passed to _popoverViewSizeForContentSize:arrowDirection:'
我试图覆盖显示弹出窗口的方法,如下所示:
-(void)splitViewController:(UISplitViewController *)svc popoverController:(UIPopoverController *)pc willPresentViewController:(UIViewController *)aViewController
{
[self.popoverController presentPopoverFromBarButtonItem:self.masterPopoverButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
但我仍然得到同样的错误.有人可以帮忙吗?
我在我的应用程序中使用MGSplitViewController库.直到iOS7它运行良好,但对于iOS8,由于iOS8中UIPopoverController 的行为改变,它无法按预期工作.附件是在iOS8上运行MGSplitView代码的屏幕截图:
这显示了错误的行为.它应该像下面的截图:

我已经读过某个地方MGSplitViewController库不会更新iOS8修复程序.有人知道我们是否有另一个适用于iOS8的库,并且具有与MGSplitViewController类似的功能.
我UISplitViewController每次点击Master VC中的一行时都会使用,我可以看到它viewDidLoad()在Detail VC中运行.
这是否意味着我每次点击都会创建一个新的Detail VC实例?
如果是这样,我如何检查Detail VC是否正确卸载并且我不只是创建越来越多的新Detail VC?
我在斯威夫特有点失落.以前我可以在dealloc()中使用NSLog并查看UIViewController正确的卸载.
我在这里Swift有一个deinit函数,但从未调用过:
deinit {
println("\(__FILE__.lastPathComponent)) : \(__FUNCTION__)")
NSNotificationCenter.defaultCenter().removeObserver(self)
}
Run Code Online (Sandbox Code Playgroud)
1)我应该把我的观察员移到哪里?
2)当我查看Xcode中的Debug Navigator时,内存使用率一直在上升而且从不下降.
if segue.identifier == "addEvent" {
if let controller = (segue.destinationViewController as UINavigationController).topViewController as? ManageViewController {
controller.manageEvent = nil
controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
controller.navigationItem.leftItemsSupplementBackButton = true
}
}
Run Code Online (Sandbox Code Playgroud)
我没有做过与我见过的很多例子不同的事情,但我担心deinit没有被召唤
deinit正在工作 - 问题是委托停止被调用(见下面的答案)我原来的非工作代码是:
protocol ManageViewDelegate {
func pressedButton(sender: AnyObject)
}
class ManageView: UIView {
var delegate: ManageViewDelegate? = nil
...
} …Run Code Online (Sandbox Code Playgroud) 我正在使用a UISplitViewController,a MasterViewController和s DetailViewController,没有UINavigationControllers.
Currenly为主 - >细节的segue动画,由
performSegueWithIdentifier("showDetail", sender: self)
Run Code Online (Sandbox Code Playgroud)
包括DetailViewController从下往上显示.
如何让动画显示左侧病房?
uinavigationcontroller uisplitviewcontroller ios segue swift
我正在做一个iPad技术演示,我遇到了一个严重的技术问题.
我有一个利用UISplitViewController的应用程序概念,但不是整个应用程序的主要控制器.
应用程序流程大致可以这样描述:
主屏幕(UIViewController)列表 - >详细信息"目录"(UISplitViewController)超级细节屏幕(UIViewController但可以想象也可以是SplitView的孩子).
问题出在Home和Catalog之间.一旦将UISplitViewController视图添加到UIWindow,它就会开始出现混乱.
问题可归纳为:
当UISplitView生成弹出视图时,它似乎会被锁定到其父视图.从UIWindow子视图中删除UISplitView后,您将获得CoreGraphics异常,并且视图将无法删除.
当添加其他视图(可能在这种情况下,你要返回的主屏幕)时,它们不会自动旋转,而是由于CG异常而无法移除的UISplitView继续响应旋转,造成可怕的渲染错误,不能只是"处理".此时,添加任何视图,甚至重新添加SplitView,都会导致一连串的渲染错误.
然后我尝试简单地将SplitView作为"底部"视图保留,并保持在其顶部添加和删除主屏幕,但这失败,因为SplitView支配Orientation更改调用,并且主屏幕不会旋转,甚至如果你打电话给[homeScreen becomeFirstResponder]
您不能将SplitView放入像UINavigationController这样的层次结构中,您将获得彻底的运行时错误,因此该选项不在表中.模态看起来很糟糕,无论如何都是劝阻.
我现在的假设是处理这个问题的唯一正确方法是以某种方式"解除"UISplitViewController,以便它可以从其父视图中删除而不抛出未处理的异常,但我不知道如何.
如果您想查看完全符合我需要的应用,请查看iPad应用商店中的GILT Groupe.他们将其关闭,但他们似乎编写了一个完整的自定义视图转换集.
非常感谢帮助.
在针对iOS 6.0 SDK构建我的iPad应用程序后,我通过UISplitViewController的详细视图得到了这种奇怪的行为.详细视图的位置比应有的低20个像素(点/ 40像素).

这是5.1下的样子:

对于Interface Builder中的DetailViewController_iPad.xib,我将模拟指标>顶栏设置为无.这没有用.我已经记录了视图框:
- (void) viewDidLayoutSubviews {
//.. etc
NSLog(@"viewDidLayoutSubviews: %@", CGRectCreateDictionaryRepresentation(self.view.frame) );
}
Run Code Online (Sandbox Code Playgroud)
这将高度记录为684而不是它应该是:704.
Height = 684; Width = 703; X = 0; Y = 0;
任何人都有这方面的经验吗?我接下来应该尝试什么?
更新:这个问题似乎是间歇性的,有些编译导致它,有些则没有.
如果其他人遇到这个问题并找出原因造成的,我仍然很想知道.
情况:iPhone 6 Plus,UISplitViewController水平旋转紧凑(折叠)和水平常规(扩展)尺寸类.
问题:似乎无法检测 - 在折叠状态下UISplitViewController- 在主控(最左侧,主要)视图控制器顶部的详细信息(最右侧,辅助)视图控制器被解除时.在详细视图控制器,既viewWillDisappear:和viewDidDisappear:始终报告NO的isMovingFromParentViewController和isBeingDismissed.UISplitViewController viewControllers数组属性不是指示性的.
原因:此问题是相关的,因为如果详细视图控制器在被解除时未被标记为(逻辑上)"空"(即"清除"),则在UISplitViewController折叠后续扩展时,将重新显示详细视图控制器(逻辑上)不相关的内容.此外,当展开的UISplitViewController是折叠时,它无法通过心爱的命名splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:委托方法选择是仅呈现主视图控制器还是在主视图控制器之上呈现详细视图控制器.
我已经拖出了一个splitViewController,并将其识别为我创建MySplitViewController的子类.
右键单击splitview故事板时,我可以看到我已设置了Master和Detail视图控制器,而且未设置委托.
我已经使我的子类符合协议并实现了一些方法,但它们没有被调用(我不明白是因为委托没有设置).
但每当我尝试从故事板中的委托选项ctrl +拖动到我的班级时,它就不会链接起来.事实上,它不会与任何东西联系起来.我使用这个协议错了,我的UISplitViewController的子类不应该是它自己的委托吗?那么我在哪里用代码或其他方式定义委托?
感谢您的时间.
编辑:更多信息 -
我尝试放入self.delegate = self;viewDidLoad,但这似乎没有帮助.
我试图覆盖的特定方法是
splitViewControllerPreferredInterfaceOrientationForPresentation:
Run Code Online (Sandbox Code Playgroud)
我已经在代码中放了一个NSLog来通知我它是否被调用,但事实并非如此
刚刚开始使用Swift,并希望复制标准Apple'Notes'应用程序中的一些功能.特别是在横向模式下在iPad上显示在详细信息视图中的"展开"按钮.
即
我最接近的(作为一个简单的快速解决方案)是将以下内容添加到AppDelegate中:
splitViewController.preferredDisplayMode = .primaryOverlay
Run Code Online (Sandbox Code Playgroud)
但是,虽然这允许以横向方向切换主视图(类似于默认的肖像行为),但它可以使用主视图作为弹出框/覆盖图完成.然而,我更喜欢Notes应用程序中存在的行为,即主视图滑入/滑出(不覆盖详细视图).
编辑:也对在iPad上仅在横向模式下显示相应按钮感兴趣.
任何帮助将不胜感激!谢谢
ios ×6
swift ×3
ios8 ×2
ipad ×2
autorotate ×1
delegates ×1
ios6 ×1
iphone ×1
objective-c ×1
segue ×1
uikit ×1
uisplitview ×1
uiview ×1
xcode ×1
xcode4.5 ×1