我在项目中面临一个小问题。我有一个简单的IPad应用程序,在Lanscape方向使用SplitView。 MasterViewController是一个tableview,而DetailView是WebView,如下所示:
上图导致以下结果:
之后,我将整个内容放在ECSlidingViewController中。点击MasterViewController中的“菜单”按钮将显示侧面菜单,如下所示:
现在我可以点击菜单中的其他选项,让我们说我在菜单中点击了“联系人”,关联的视图控制器将出现如下所示:(此视图控制器没有任何详细视图)< / p>
到目前为止的一切都很好,正是我想要的!!!! 问题现在开始了,当我再次点击菜单按钮显示菜单并再次选择“导航”以显示实现代码如下。点击“导航”时,它会显示MasterView,但会隐藏DetailView,如下所示:
除此之外,点击上面tableivew中的任何条目都会导致程序在控制台中崩溃并显示以下消息:
*断言失败 - [UIStoryboardReplaceSegue perform],/ SourceCache / UIKit_Sim / UIKit-2380.17 / UIStoryboardBuiltInSegues.m:63 2013-03-30 13:59:58.179 19IPadIPad [5806:c07] * 终止app到期 未捕获的异常'NSInternalInconsistencyException',原因: '无法找到分割视图控制器的祖先 '',执行拆分视图时 controller用目标替换segue(标识符'pushLink') “”” ***首先抛出调用堆栈:(0x217b012 0x16bce7e 0x217ae78 0x1152665 0xa57349 0xa48b99 0xa48c14 0x6b0249 0x6b04ed 0x10ba5b3 0x213a376 0x2139e06 0x2121a82 0x2120f44 0x2120e1b 0x1d587e3 0x1d58668 0x600ffc 0x24bd 0x23e5)libc ++ abi.dylib:terminate调用抛出异常
有人可以调查问题并告诉问题可能在哪里。提前谢谢。
在聊天时与用户交谈时,他建议我点击菜单中的导航后,出现的下一件事只有masterview和splitview实际上没有加载。看起来这是问题,但我不知道如何解决这个问题。
ECSlidingView如何与SplitView集成
我在收到评论询问ECSlidingView如何连接到项目和SplitView后更新问题。
我创建了一个名为'MainSplitViewController'的类,它继承自UISplitViewController,并在身份检查器的故事板中将它与splitView连接起来。我还给它了“SplitTop”的故事板ID。
然后在我的InitialViewController中,我将SplitView称为topviewcontroller,如下所示:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
self.topViewController = [storyboard instantiateViewControllerWithIdentifier:@"SplitTop"];
}
当您在MasterViewController上按下“Menu”按钮时,会出现ECSlidingView菜单,如上图所示。该菜单按钮使用IBAction来显示ECSlidingView:
- (IBAction)revealMenu:(id)sender {
[self.slidingViewController anchorTopViewTo:ECRight];
}
答案 0 :(得分:1)
我还在我正在研究的测试项目中使用了ECSlidingViewController。我想我能够解决你遇到的问题。
首先,这个问题与SplitView或其中的导航控制器没有任何关系,因为你可以删除SplitView,它可以正常工作。此问题完全与您如何在ECSlidingView库中集成SplitViewController相关联。
在浏览了上面发布的图像后,在开始处理SplitView之前,似乎已将ECSlidingViewController添加到项目中。这意味着在您的代码中,导航菜单仍然连接到您的MasterViewController。它应该连接到SplitViewController。
由于您的更新问题表明您在InitialView中调用SplitView,如下所示:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
self.topViewController = [storyboard instantiateViewControllerWithIdentifier:@"SplitTop"];
}
但是上面的代码只是将它设置为TopViewController。我检查了ECSlidingView库,您会注意到MenuViewController处理了显示的Menu表视图。这意味着您必须在此课程中进行必要的更改。
由于MainSplitViewController类的StoryBoard ID设置为&#39; SplitTop&#39;,您可以将它添加到MenuViewController类的ViewDidLoad部分,其中定义了绘制Menu项的整个数组。
希望有所帮助。