Tom*_*utz 27 objective-c uisplitviewcontroller ios swift
我有一个带有目标iPhone 6应用程序的拆分视图界面.在第一次启动应用程序时,它将打开详细信息视图; 我希望它能打开Master View.我试过了:
self.splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.PrimaryOverlay
Run Code Online (Sandbox Code Playgroud)
其他地方(Prior StackOverFlow Question)建议但它似乎没有做任何事情,并且在启动时不会打开主视图.我还尝试将以下行添加到AppDelegate:
splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:
Run Code Online (Sandbox Code Playgroud)
但是,尽管返回真或假(另一个先前的堆栈溢出问题),我没有成功.
我确实在Xcode中启动了示例Master-Detail应用程序,并根据splitViewController加载到Master视图:call returns false; 但是,我不确定如何在更复杂的布局中完成这项工作.
Swi*_*ect 65
UISplitViewController显示主视图上面的纵向细节不是关于显示主视图,而是关于在主视图下方呈现全宽的详细视图.
UISplitViewController在iPhone上的肖像显示详细信息VC而不是master是关于崩溃机制的原理.
本答案涉及:
你必须设置preferredDisplayMode
..primaryVisible
如果它存在,你会想要的!如果只有1个视图适合使用.allVisible
iOS选择(紧凑宽度) ; 在那个大小,下面的代码将选择.Detail
Master
关键是要改变双方的preferredDisplayMode
对.allVisible
和返回true
在collapseSecondary:onto
.
class PrimarySplitViewController: UISplitViewController,
UISplitViewControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
self.preferredDisplayMode = .allVisible
}
func splitViewController(
_ splitViewController: UISplitViewController,
collapseSecondary secondaryViewController: UIViewController,
onto primaryViewController: UIViewController) -> Bool {
// Return true to prevent UIKit from applying its default behavior
return true
}
}
Run Code Online (Sandbox Code Playgroud)
Jar*_*ren 13
我没有收到回调splitViewController(_:collapseSecondary:onto:)
,而是使用了以下新方法。
func splitViewController(_ svc: UISplitViewController, topColumnForCollapsingToProposedTopColumn proposedTopColumn: UISplitViewController.Column) -> UISplitViewController.Column {
return .primary
}
Run Code Online (Sandbox Code Playgroud)
第1步 - 打开MasterViewController
第2步 - 确保表视图具有UISplitViewControllerDelegate协议.例如:
class ListVC: UITableViewController,UISplitViewControllerDelegate {}
Run Code Online (Sandbox Code Playgroud)
第3步 - 在ViewDidLoad中添加它
splitViewController?.delegate = self
Run Code Online (Sandbox Code Playgroud)
步骤4 - 然后重写此方法,说主视图控制器应始终折叠到详细视图控制器上:
func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool {
return true
}
Run Code Online (Sandbox Code Playgroud)
首次启动该应用程序时,它将打开到“详细信息视图”。我希望它对主视图开放
假设您只希望在第一次启动时这样做,但并不总是这样;例如,在主视图显示空数据集的情况下;那么解决方案就像主从模板显示的那样:
func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController:UIViewController, ontoPrimaryViewController primaryViewController:UIViewController) -> Bool {
guard let secondaryAsNavController = secondaryViewController as? UINavigationController else { return false }
guard let topAsDetailController = secondaryAsNavController.topViewController as? DetailViewController else { return false }
if topAsDetailController.detailItem == nil {
// Return true to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
return true
}
return false
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14236 次 |
最近记录: |