UIPageViewController delegate/datasource 方法未触发
UIPageViewController delegate/datasource methods not firing
我有这样的设置:
UIWindow
->UIViewController
->UIPageViewController
->UIViewController
.
我已将 UIPageViewController
的委托和数据源设置为 UIViewController
中的 self
,但是每次我尝试用数据更新 UIPageViewController
时,它只会显示一张图片。我正在将父 UIViewController
的框架从小放大到大,也许这会影响它?我在 UIWindow
以外的其他地方有几乎相同的代码,并且可以工作。 UIWindow
有什么事吗?
如有任何帮助,我们将不胜感激!
--编辑--
好的,请提供更多信息。当用户选择 table 视图单元格时,我会调用它。首先,我创建了一个新的 UIWindow
,它与当前的主 UIWindow
大小相同,但位于状态栏的顶部。然后我从故事板创建一个 ExpandedViewController
,将它的帧大小设置为与 UITableViewCell
相同,给它一些图像加载到 UIPageViewController
,然后告诉它重新加载它的数据。我还调整了 UIPageViewController 的视图控制器内的 UIImageView
的中心,稍后我可以对其进行动画处理,但这无关紧要。然后我将 ExpandedViewController
的视图添加到 UIWindow
。这是代码:
let cell = tableView.dequeueReusableCellWithIdentifier("aCell", forIndexPath: indexPath) as! ContentTableCell
var cellRect = tableView.rectForRowAtIndexPath(indexPath)
var convertedFrame = tableView.convertRect(cellRect, toView: UIApplication.sharedApplication().keyWindow!)
newWindow = UIWindow(frame: self.view.window!.bounds)
newWindow.hidden = false
newWindow.windowLevel = (UIWindowLevelStatusBar + 1)
var expandedViewController = self.storyboard!.instantiateViewControllerWithIdentifier("ExpandedViewController")! as! ExpandedViewController
expandedViewController.view.frame = convertedFrame
expandedViewController.pageImages = imagesForTableView
expandedViewController.reloadData(indexPath.row)
var expandedContentViewController = (expandedViewController.pageViewController.viewControllers.last! as! ExpandedContentViewController)
expandedContentViewController.imageView.frame = self.view.frame
expandedContentViewController.imageView.center = CGPointMake(cellRect.width/2, cellRect.height/2 + 5)
newWindow.backgroundColor = UIColor(red: 30/255, green: 1/255, blue: 42/255, alpha: 1)
newWindow.addSubview(expandedViewController.view)
newWindow.makeKeyAndVisible()
ExpandedViewController
的 ViewDidLoad()
方法中有这段代码:
self.view.clipsToBounds = true
pageImages = []
// Initialise the Page View Controller from storyboard. Set ourselves as delegate and datasource to it.
pageViewController = storyboard!.instantiateViewControllerWithIdentifier("ExpandedPageViewController")! as! UIPageViewController
pageViewController.dataSource = self
pageViewController.delegate = self
// Get the View Controller for the first page of the Page View Controller and store in an array
if let startingViewController: ExpandedContentViewController = viewControllerAtIndex(0) {
let viewControllers: NSArray = [startingViewController]
// Set the first page of the Page View Controller
pageViewController.setViewControllers(viewControllers as [AnyObject], direction: .Forward, animated: false, completion: nil)
}
// Make sure the Page View Controller takes up full area of screen
pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)
// Add the Page View Controller to current view
self.addChildViewController(pageViewController)
self.view.addSubview(pageViewController.view)
self.pageViewController.didMoveToParentViewController(self)
我通过替换
解决了它
newWindow.addSubview(expandedViewController.view)
和
newWindow.rootViewController = expandedViewController
事实证明 .rootViewController
是向 UIWindow
添加视图的推荐方式
我有这样的设置:
UIWindow
->UIViewController
->UIPageViewController
->UIViewController
.
我已将 UIPageViewController
的委托和数据源设置为 UIViewController
中的 self
,但是每次我尝试用数据更新 UIPageViewController
时,它只会显示一张图片。我正在将父 UIViewController
的框架从小放大到大,也许这会影响它?我在 UIWindow
以外的其他地方有几乎相同的代码,并且可以工作。 UIWindow
有什么事吗?
如有任何帮助,我们将不胜感激!
--编辑--
好的,请提供更多信息。当用户选择 table 视图单元格时,我会调用它。首先,我创建了一个新的 UIWindow
,它与当前的主 UIWindow
大小相同,但位于状态栏的顶部。然后我从故事板创建一个 ExpandedViewController
,将它的帧大小设置为与 UITableViewCell
相同,给它一些图像加载到 UIPageViewController
,然后告诉它重新加载它的数据。我还调整了 UIPageViewController 的视图控制器内的 UIImageView
的中心,稍后我可以对其进行动画处理,但这无关紧要。然后我将 ExpandedViewController
的视图添加到 UIWindow
。这是代码:
let cell = tableView.dequeueReusableCellWithIdentifier("aCell", forIndexPath: indexPath) as! ContentTableCell
var cellRect = tableView.rectForRowAtIndexPath(indexPath)
var convertedFrame = tableView.convertRect(cellRect, toView: UIApplication.sharedApplication().keyWindow!)
newWindow = UIWindow(frame: self.view.window!.bounds)
newWindow.hidden = false
newWindow.windowLevel = (UIWindowLevelStatusBar + 1)
var expandedViewController = self.storyboard!.instantiateViewControllerWithIdentifier("ExpandedViewController")! as! ExpandedViewController
expandedViewController.view.frame = convertedFrame
expandedViewController.pageImages = imagesForTableView
expandedViewController.reloadData(indexPath.row)
var expandedContentViewController = (expandedViewController.pageViewController.viewControllers.last! as! ExpandedContentViewController)
expandedContentViewController.imageView.frame = self.view.frame
expandedContentViewController.imageView.center = CGPointMake(cellRect.width/2, cellRect.height/2 + 5)
newWindow.backgroundColor = UIColor(red: 30/255, green: 1/255, blue: 42/255, alpha: 1)
newWindow.addSubview(expandedViewController.view)
newWindow.makeKeyAndVisible()
ExpandedViewController
的 ViewDidLoad()
方法中有这段代码:
self.view.clipsToBounds = true
pageImages = []
// Initialise the Page View Controller from storyboard. Set ourselves as delegate and datasource to it.
pageViewController = storyboard!.instantiateViewControllerWithIdentifier("ExpandedPageViewController")! as! UIPageViewController
pageViewController.dataSource = self
pageViewController.delegate = self
// Get the View Controller for the first page of the Page View Controller and store in an array
if let startingViewController: ExpandedContentViewController = viewControllerAtIndex(0) {
let viewControllers: NSArray = [startingViewController]
// Set the first page of the Page View Controller
pageViewController.setViewControllers(viewControllers as [AnyObject], direction: .Forward, animated: false, completion: nil)
}
// Make sure the Page View Controller takes up full area of screen
pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)
// Add the Page View Controller to current view
self.addChildViewController(pageViewController)
self.view.addSubview(pageViewController.view)
self.pageViewController.didMoveToParentViewController(self)
我通过替换
解决了它newWindow.addSubview(expandedViewController.view)
和
newWindow.rootViewController = expandedViewController
事实证明 .rootViewController
是向 UIWindow