Ios 从未调用过UISPlitViewController Delegate

Ios 从未调用过UISPlitViewController Delegate,ios,iphone,swift,uikit,uisplitviewcontroller,Ios,Iphone,Swift,Uikit,Uisplitviewcontroller,几天来,我一直试图让UISplitViewController调用代理。我尝试在MasterViewController中设置它,我尝试在DetailViewController中设置它,我尝试将SVC作为另一个视图控制器内的容器中的嵌入式视图控制器,并使用prepareforsgue调用来设置委托。我尝试从AppDelegate中的故事板中实例化它,并在那里设置委托。从未调用过该委托。我快疯了。 我正在iOS 10.3.1上使用最新的非测试版Swift(3.1) 我使用了调试器来检查委托是否已

几天来,我一直试图让
UISplitViewController
调用代理。我尝试在
MasterViewController
中设置它,我尝试在
DetailViewController
中设置它,我尝试将
SVC
作为另一个视图控制器内的容器中的嵌入式视图控制器,并使用
prepareforsgue
调用来设置委托。我尝试从
AppDelegate
中的故事板中实例化它,并在那里设置委托。从未调用过该委托。我快疯了。 我正在iOS 10.3.1上使用最新的非测试版Swift(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
。我尝试这样做的原因是为了能够控制视图的折叠。在iPhone的纵向模式下,
UISplitViewController
的默认配置中,默认为
detailViewController
。对于大多数应用程序(和我的应用程序)来说,这种行为显然是错误的。我打算首先显示列出我要显示的内容的
masterViewController
,并仅在选择项目时触发
detailViewController

我也会接受一个答案,该答案为我提供了另一种方式来实现这种行为(在纵向上更喜欢
masterViewController
,除非我的
detailViewController
有内容集)


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

请尝试下面的代码,这对我很有用

在AppDelegate中:

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"
    }
}
详细信息查看控制器

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"
    }
}

我希望它也能为您工作。

请尝试下面的代码,这是我的工作

在AppDelegate中:

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"
    }
}
详细信息查看控制器

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"
    }
}

我希望它也能对您起作用。

很遗憾,您的回答对我没有用处。正如您所看到的,我正在尝试实现UISplitviewControllerDelegate,正如您的回答所暗示的,我在将数据传递到详细视图控制器时没有遇到问题。对不起,兄弟!我使用的是自定义协议,而不是UISplitviewControllerDelegate。您的回答没有用我很遗憾。正如您所看到的,我正在尝试实现UISplitviewControllerDelegate,正如您的回答所暗示的,我将数据传递到细节视图控制器没有问题。对不起,兄弟!我使用的是自定义协议而不是UISplitviewControllerDelegate。您最终找到了解决方案吗?您最终找到了解决方案吗?