PageViewController iOS Swift出现问题
iOS中带Swift的UIpageviewController有问题,代码如下:PageViewController iOS Swift出现问题,ios,swift,uipageviewcontroller,Ios,Swift,Uipageviewcontroller,iOS中带Swift的UIpageviewController有问题,代码如下: class RootPageController: UIPageViewController , UIPageViewControllerDataSource , UIPageViewControllerDelegate{ var showPhotoController: PageController! // it's the first page var array : NSMutable
class RootPageController: UIPageViewController , UIPageViewControllerDataSource , UIPageViewControllerDelegate{
var showPhotoController: PageController! // it's the first page
var array : NSMutableArray?
var id : String?
var photosActivities : NSArray? // photos that I have to show in the pages
var index : Int?
override func viewDidLoad() {
self.delegate = self
self.dataSource = self
self.showPhotoController = self.storyboard?.instantiateViewControllerWithIdentifier("first") as PageController
self.array = NSMutableArray()
self.array?.addObject(self.showPhotoController)
self.index = 0
self.setViewControllers(self.array, direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)
var model = ModelDataServer(username: "", password: "")
self.photosActivities = model.getPhotosActivityWithID(self.id!)
self.showPhotoController.photo.image = self.photosActivities?.objectAtIndex(self.index!) as? UIImage
self.index = self.index! + 1
}
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
{
if(self.index > 0){
self.index = self.index! - 1
var previousPage = self.storyboard?.instantiateViewControllerWithIdentifier("first") as PageController
var image: UIImage = self.photosActivities?.objectAtIndex(self.index!) as UIImage
previousPage.photo.image = image
return previousPage
}
return nil
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController?
{
if(self.index! < self.photosActivities!.count ){
var newPage : PageController = self.storyboard?.instantiateViewControllerWithIdentifier("first") as PageController
var image: UIImage = self.photosActivities?.objectAtIndex(self.index!) as UIImage
newPage.photo.image = image
self.index = self.index! + 1
return newPage
}
return nil
}
}
我有一个PageViewController,它由不同的页面组成。此页面是一个视图控制器,它具有用于显示图像的UIIMageView。此viewcontroller的类型为PageController
我的问题是:
当我更改页面并转到下一页时,我会看到下一页控制器,但在UIIMageView中看不到图像,即使我在viewControllerAfterViewController
中设置了新图像
非常感谢您的时间我相信这是因为视图控制器的视图是惰性实例化的,即使视图控制器本身是从故事板实例化的。结果是,
previousPage.photo
和newPage.photo
在您尝试设置其图像时均为零。为了解决这个问题,我将向PageController类添加一个单独的UIImage存储属性
var photoToShow : UIImage = UIImage()
然后,在viewControllerBeforeViewController
和viewControllerAfterViewController
方法中,根据照片数组中的相关项设置此新属性:
newPage.photoToShow = self.photosActivities?.objectAtIndex(self.index!) as UIImage
及
然后在PageController
类的viewDidLoad
中(此时视图和子视图,包括photo
UIImageView,将被实例化),将photo.image
设置为新存储的属性:
photo.image = photoToShow
为了更好地理解,您在下一页的
UIImageView
中看到了什么?总是一样的形象?还是什么都没有?我什么也没看见。我只看到视图背景(它是黄色的)我只在第一页看到图像(代码中的showPhotoController),从第二页开始我只看到视图背景确保从数组中检索的图像不是零。是的,它不是零,因为我得到了它(使用println())“可选()
previousPage.photoToShow = self.photosActivities?.objectAtIndex(self.index!) as UIImage
photo.image = photoToShow