将委托设置为现有视图控制器



我正在 segue 上设置一个委托,但我需要将其设置为现有SfnViewController,而不是这里似乎正在发生的事情正在创建一个新委托。

如何访问现有SfnViewController以使其通过?

class ViewerListController {
    func tableView(tableView: UITableView, accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath) {
        editViewer = fetchedResultController.objectAtIndexPath(indexPath) as? Viewer
        performSegueWithIdentifier("editViewer", sender: indexPath)
    }
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "editViewer" {
            let editViewerViewController = segue.destinationViewController.topViewController as! EditViewerViewController
            editViewerViewController.viewer = editViewer
            //Need this as the existing SfnViewController
            editViewerViewController.delegate = SfnViewController()
        }
    }
}

我们无法真正帮助您,因为您没有提供足够的信息。你说你有一个现有的SfnViewController。

  • 此对象是在何时何地创建的?
  • 谁拥有它?
  • 您的 ViewListController 是否有对它的引用?

如果整个对象只有一个共享的 SfnViewController,则应考虑遵循单例设计模式,并使 SfnViewController 成为单例。然后,您将使用 SfnViewController 类的类方法来获取对单一实例的引用。

如果你的意思是使用一些特定的控制器,你可以在tableView:accessoryButtonTappedForRowWithIndexPath:方法中确定,那么在调用performSegueWithIdentifier时,你应该在"sender"属性中发送它,如下所示:

class ViewerListController {
    func tableView(tableView: UITableView, accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath) {
        editViewer = fetchedResultController.objectAtIndexPath(indexPath) as? Viewer
        performSegueWithIdentifier("editViewer", sender: editViewer)
    }
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "editViewer" {
            let editViewerViewController = segue.destinationViewController.topViewController as! EditViewerViewController
            editViewerViewController.viewer = editViewer
            let editViewer = sender as! EditViewerViewController
            editViewerViewController.delegate = editViewer.delegate
        }
    }
}

最新更新