UISplitViewControllerDelegate 从未调用过



几天来我一直在努力让UISplitViewController打电话给代表。我尝试在MasterViewController中设置它,尝试在DetailViewController中设置它,我尝试将SVC作为另一个视图控制器内的容器中的嵌入式视图控制器,并使用prepareForSegue调用来设置委托。我尝试从AppDelegate的故事板中实例化它并在那里设置委托。从不调用委托。我快疯了。 我使用的是最新的非测试版 Swift (3.1),在 iOS 10.3.1 上。

我使用调试器来检查委托是否确实已设置,并保留在内存中,但是,从未调用过这些方法。

感谢您为我提供的任何帮助。

这是我目前的AppDelegate,但正如我所说,我已经尝试了无数种方法:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
Realm.Configuration.defaultConfiguration.deleteRealmIfMigrationNeeded = true
if let svc = self.window?.rootViewController as? UISplitViewController {
svc.delegate = svc.viewControllers.last as! UISplitViewControllerDelegate
}
return true
}

编辑 1:

你们中的一些人不明白我正在尝试实现什么委托。澄清一下,我正在尝试控制UISplitViewController的代表,换句话说,UISplitViewControllerDelegate.我尝试这样做的原因是能够控制视图的折叠。在UISplitViewController的默认配置中,在纵向模式下的iPhone上,默认为detailViewController。对于大多数应用程序(和我的应用程序)来说,这种行为显然是错误的。我打算首先显示列出我要显示的内容的masterViewController,并仅在选择项目时触发detailViewController

我也会接受一个答案,它给了我一些替代的方式来拥有这种行为(更喜欢masterViewController肖像,除非我的detailViewController设置了内容。

我知道您可以通过不在情节提要中设置detailViewController并在选择项目时使用showDetailsegue 来获得所描述的行为,但我的问题是,当没有选择任何项目时,我无法拥有默认视图,导致在 iPad 或 iPhone Plus 上横向显示灰色方块(不是很漂亮)。

请尝试以下代码,它对我有用。

在应用程序委托中:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let splitViewController = self.window!.rootViewController as! UISplitViewController
let navViewController = splitViewController.viewControllers.first as? UINavigationController
let masterVC = navViewController?.topViewController as? MasterViewController
let detailViewController = splitViewController.viewControllers.last as? DetailsViewController
masterVC?.delegate = detailViewController
return true
}

在主视图控制器中

protocol MasterViewControllerDelegate : class{
func passingData(strName : String)
}
class MasterViewController: UITableViewController {
weak var delegate : MasterViewControllerDelegate?
override func viewDidLoad() {
super.viewDidLoad()
//Calling Delegate
delegate?.passingData(strName: "Any Message")
if let detailViewController = self.delegate as? DetailsViewController {
splitViewController?.showDetailViewController(detailViewController, sender: nil)
}
}
}

在详细视图控制器

class DetailsViewController: UIViewController, MasterViewControllerDelegate{
//Other IBOutlet and Methods
//Delegate method of MasterViewControllerDelegate
func passingData(strName : String)
print(strName) //OUTPUT: "Any Message"
}
}

我希望它也对你有用。

相关内容

  • 没有找到相关文章

最新更新