![](/img/trans.png)
[英]how to have Swift <BACK seque tap cause a func on the parent view to execute?
[英]Func not execute properly (Swift 3)
我仍然是iOS开发的新手。 我的想法是我要从banner
(数据模型)中放入images
值。 因此,我需要调用func getAllBanner
来获取所有值。 然后仅称为func turnToPage
。
问题是let controller = controllers[index]
为
致命错误:索引超出范围
调试时,我注意到了lazy var controllers: [UIViewController]
。 这是为什么 ?
任何帮助都非常感谢。
var images: [UIImage]?
var banner: [Banner]?
// Variable that not create onDidLoad
lazy var controllers: [UIViewController] = {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
var controllers = [UIViewController]()
if let images = self.images {
for image in images {
let sliderImageVC = storyboard.instantiateViewController(withIdentifier: Storyboard.sliderImageViewController)
controllers.append(sliderImageVC)
}
}
self.pageViewControllerDelegate?.setupPageController(numberOfPages: controllers.count)
return controllers
}()
override func viewDidLoad() {
super.viewDidLoad()
automaticallyAdjustsScrollViewInsets = false
dataSource = self
delegate = self
self.getAllBanner(strAppID: "1", locationid: "2")
self.turnToPage(index: 0)
}
// To allow to turn page
func turnToPage(index: Int) {
let controller = controllers[index]
var direction = UIPageViewControllerNavigationDirection.forward
if let currentVC = viewControllers?.first {
let currentIndex = controllers.index(of: currentVC)
if currentIndex! > index {
direction = .reverse
}
}
self.configureViewDisplaying(viewController: controller)
setViewControllers([controller], direction: direction, animated: true, completion: nil)
}
// Get Banner
func getAllBanner(strAppID: String, locationid: String) {
Banner.getBanner(strAppID: strAppID, locationID: locationid) { [weak self] banner in
guard let `self` = self else {
return
}
self.banner = banner
// Update UI here
if let banners = self.banner {
for banner in banners {
let endPoint = URL(string: banner.ImageURL)
do {
let data = try Data(contentsOf: endPoint!)
self.images = [UIImage(data: data)!]
} catch {
print("Error")
}
}
}
}
}
您可以使用此代码段。
func getAllBanner(strAppID: String, locationid: String) {
Banner.getBanner(strAppID: strAppID, locationID: locationid) { [weak self] banner in
guard let `self` = self else {
return
}
self.banner = banner
// Update UI here
if let banners = self.banner {
var images: [UIImage] = []
for banner in banners {
let endPoint = URL(string: banner.ImageURL)
do {
let data = try Data(contentsOf: endPoint!)
images.append(UIImage(data: data)!)
} catch {
print("Error")
}
}
self.images = images
// call turnpage method here
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.