【发布时间】:2017-12-08 11:23:19
【问题描述】:
我有一个带有名称列表的表格视图,我希望在按下表格视图中的一个单元格以将单元格的名称内容传递给即将到来的包含 2 个不同视图的页面视图控制器时。我正在使用一个名为 pulley 的库,我无法通过推送模式来执行 segues,所以在“didSelectRow”方法内部我正在这样做
let pagevc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PageVC") as! PageViewController
(parent as? PulleyViewController)?.setDrawerContentViewController(controller: pagevc, animated: true)
完成对pageviewcontroller的segue。这应该是对的。 但是pageviewcontroller View里面的2个View,都需要选中单元格的Name。所以我这样做了:
pagevc.name = selBarName
并确保我对页面控制器的 2 个视图做同样的事情(仍然在前一个 tableview 类的 didSelectRow 方法中):
let detvc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "DetailVC") as! DetailVC
detvc.barname = selBarName
let speisevc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SpeisekarteVC") as! SpeisekarteVC
speisevc.barname = selBarName
但是在每个类中打印 var barname 表明 var 仍然是一个空字符串。只有 pagevc 的 var 名称已更改为想要的名称。 因此,我在 PageViewController 类的 viewdidload 中实例化了两个视图,但它仍然没有将数据从 pagevc 传递到 pagevc 中包含的其他 2 个视图。
我希望我能把问题弄清楚。如果您需要更多输入,请告诉我缺少什么。基本上我只需要知道如何将一个字符串从 PageViewController 传递给它包含的视图。到目前为止,我可以将所选单元格的名称传递给 pageviewcontroller,但不能传递给 pageviewcontroller 呈现的视图。
编辑:
PageController 本身应该是正确的,因为在其中只使用 2 个空视图,不需要 var 名称就可以正常工作。
这是 PageViewController 类的一部分,只是为了让事情变得完整:
class PageViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource {
var name = ""
var pageControl = UIPageControl()
lazy var orderedViewControllers: [UIViewController] = {
return [self.newVc(viewController: "DetailVC"),
self.newVc(viewController: "SpeisekarteVC")]
}()
override func viewDidLoad() {
print(name, "hierpageview") //THIS NAME IS PRINTED CORRECTLY AS WISHED
super.viewDidLoad()
self.dataSource = self
self.delegate = self
let speisevc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SpeisekarteVC") as! SpeisekarteVC
speisevc.barname = name
let detvc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "DetailVC") as! DetailVC
detvc.barname = name
print(detvc.barname, "dhdhfhdah") //THIS ONE IS ALSO PRINTED RIGHT BUT PRINTING IT INSIDE THE ACTUAL CLASS RETURNS AGAIN AN EMPTY STRING !!!
if let firstViewController = orderedViewControllers.first {
setViewControllers([firstViewController],
direction: .forward,
animated: true,
completion: nil)
}
func newVc(viewController: String) -> UIViewController {
return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: viewController)
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = orderedViewControllers.index(of: viewController) else {
return nil
}
let previousIndex = viewControllerIndex - 1
guard previousIndex >= 0 else {
return nil
}
guard orderedViewControllers.count > previousIndex else {
return nil
}
return orderedViewControllers[previousIndex]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = orderedViewControllers.index(of: viewController) else {
return nil
}
let nextIndex = viewControllerIndex + 1
let orderedViewControllersCount = orderedViewControllers.count
guard orderedViewControllersCount != nextIndex else {
return nil
}
guard orderedViewControllersCount > nextIndex else {
return nil
}
return orderedViewControllers[nextIndex]
}
}
}
【问题讨论】:
标签: swift xcode uitableview segue uipageviewcontroller