带有子 ViewController 的 UIPageViewController
UIPageViewController with child ViewControllers
我是 iOS 的新手,目前有 3 个视图,想使用滑动手势在它们之间导航。刷卡工作。红色 bg 视图按照我的意愿首先加载,滑动效果很好,但是点击“下一步”按钮没有任何作用。谁能给我一个提示?我正在接近这个错误,但似乎无法在 google
上找到任何帮助
在我的项目中,我有一个处理 UIPageViewController 的 MemberCardViewController:
class MemberCardViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
lazy var viewArray: [UIViewController] = {
return [self.ViewControllerInstance(name: "CalendarView"),
self.ViewControllerInstance(name: "IdCardView"),
self.ViewControllerInstance(name: "MemberInfoView")]
}()
private func ViewControllerInstance(name: String) -> UIViewController {
return UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name)
}
override func viewDidLoad() {
super.viewDidLoad()
self.dataSource = self
self.delegate = self
loadViewController(viewPosition: 1)
}
func loadViewController(viewPosition: Int) {
if let viewController = viewArray.get(at: viewPosition) {
setViewControllers([viewController], direction: .forward, animated: true, completion: nil)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
...
现在,我还创建了一个与身份证(红色背景视图)对应的 IdCardViewController
class IdCardViewController: UIViewController {
var pvc = MemberCardViewController()
@IBAction func loadRight(_ sender: Any) {
pvc.loadViewController(viewPosition: 2)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
我现在面临的问题是,当在 Id Card 中单击“下一步”按钮时,我想加载“会员信息”视图,但现在单击它时没有任何反应。但是,我在 MemberCardViewController 的 loadViewController()
方法中设置了断点,可以看到当单击按钮时应用程序正在到达它,但是视图不会更改为 Member Info
。
您没有为 IdCardViewController
的 pvc
变量分配任何内容。因此,当您实例化 IdCardViewController
的实例时,您应该将 MemberCardViewController
对象分配给 pvc
变量。祝你好运!
编辑
改变
private func ViewControllerInstance(name: String) -> UIViewController {
return UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name)
}
到
private func ViewControllerInstance(name: String) -> UIViewController {
if name == "IdCardView"
{
if let vc = UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name) as? IdCardViewController {
vc.pvc = self
return vc
}
}
return UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name)
}
这里所做的是,在实例化 IdCardViewController
的实例之后,MemberCardViewController
的对象(在本例中为 self
)被分配给 pvc
多变的。此外,要使此代码正常工作,您必须为情节提要中的 "Id Card" 视图控制器分配权限 class。为此,select "Id Card" 在故事板中查看控制器的对象,并将其 class 更改为 "Identity Inspector" 中的 IdCardViewController
。
希望这对您有所帮助!
我是 iOS 的新手,目前有 3 个视图,想使用滑动手势在它们之间导航。刷卡工作。红色 bg 视图按照我的意愿首先加载,滑动效果很好,但是点击“下一步”按钮没有任何作用。谁能给我一个提示?我正在接近这个错误,但似乎无法在 google
上找到任何帮助在我的项目中,我有一个处理 UIPageViewController 的 MemberCardViewController:
class MemberCardViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
lazy var viewArray: [UIViewController] = {
return [self.ViewControllerInstance(name: "CalendarView"),
self.ViewControllerInstance(name: "IdCardView"),
self.ViewControllerInstance(name: "MemberInfoView")]
}()
private func ViewControllerInstance(name: String) -> UIViewController {
return UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name)
}
override func viewDidLoad() {
super.viewDidLoad()
self.dataSource = self
self.delegate = self
loadViewController(viewPosition: 1)
}
func loadViewController(viewPosition: Int) {
if let viewController = viewArray.get(at: viewPosition) {
setViewControllers([viewController], direction: .forward, animated: true, completion: nil)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
...
现在,我还创建了一个与身份证(红色背景视图)对应的 IdCardViewController
class IdCardViewController: UIViewController {
var pvc = MemberCardViewController()
@IBAction func loadRight(_ sender: Any) {
pvc.loadViewController(viewPosition: 2)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
我现在面临的问题是,当在 Id Card 中单击“下一步”按钮时,我想加载“会员信息”视图,但现在单击它时没有任何反应。但是,我在 MemberCardViewController 的 loadViewController()
方法中设置了断点,可以看到当单击按钮时应用程序正在到达它,但是视图不会更改为 Member Info
。
您没有为 IdCardViewController
的 pvc
变量分配任何内容。因此,当您实例化 IdCardViewController
的实例时,您应该将 MemberCardViewController
对象分配给 pvc
变量。祝你好运!
编辑
改变
private func ViewControllerInstance(name: String) -> UIViewController {
return UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name)
}
到
private func ViewControllerInstance(name: String) -> UIViewController {
if name == "IdCardView"
{
if let vc = UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name) as? IdCardViewController {
vc.pvc = self
return vc
}
}
return UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name)
}
这里所做的是,在实例化 IdCardViewController
的实例之后,MemberCardViewController
的对象(在本例中为 self
)被分配给 pvc
多变的。此外,要使此代码正常工作,您必须为情节提要中的 "Id Card" 视图控制器分配权限 class。为此,select "Id Card" 在故事板中查看控制器的对象,并将其 class 更改为 "Identity Inspector" 中的 IdCardViewController
。
希望这对您有所帮助!