在仅在最后一个 UIImageview 上可见的 PageViewController 上添加 UIButton
Adding UIButton on PageViewController which is visible on the last UIImageview only
我完成了一个基于送餐的项目 app.I 添加了我的 3 张图像,它们位于视图控制器及其页面视图控制器中,因为我希望我的图像水平滑动。
我问这个问题的主要目的是我需要在最后一张图片中有一个按钮 view.Please 为我提供添加仅在最后一张图片中可见的 UIButton 的完整代码。
例如 - :
(Lets Go) 是一个按钮,在关于按钮放置的最后一张图片 view.Forget 中可用。
提前致谢....
我的代码是这样的-:
ViewController.swift
导入 UIKit
class ViewController: UIViewController , UIPageViewControllerDataSource{
var pageViewController : UIPageViewController?
let Contentimages = ["splash","up","viewpage_bg"]
override func viewDidLoad() {
super.viewDidLoad()
createpageViewController()
setupPageControl()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func createpageViewController(){
let pageController = self.storyboard?.instantiateViewController(withIdentifier: "pageController") as! UIPageViewController
pageController.dataSource = self
if Contentimages.count > 0 {
let firstController = getItemController(0)!
let startingViewController = [firstController]
pageController.setViewControllers(startingViewController, direction: UIPageViewControllerNavigationDirection.forward, animated: false, completion: nil)
}
pageViewController = pageController
addChildViewController(pageViewController!)
self.view.addSubview(pageViewController!.view)
pageViewController?.didMove(toParentViewController: self)
}
func setupPageControl(){
let appearance = UIPageControl.appearance()
appearance.pageIndicatorTintColor=UIColor.gray
appearance.currentPageIndicatorTintColor=UIColor.white
appearance.backgroundColor=UIColor.darkGray
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
let itemController = viewController as! ItemViewController
if itemController.itemIndex > 0
{
return getItemController(itemController.itemIndex-1)
}
return nil
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
let itemController = viewController as! ItemViewController
if itemController.itemIndex+1 < Contentimages.count
{
return getItemController(itemController.itemIndex+1)
}
return nil
}
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return Contentimages.count
}
func presentationIndex(for pageViewController: UIPageViewController) -> Int {
return 0
}
func currentControllerIndex() -> Int {
let pageItemController = self.currentController()
if let controller = pageItemController as?ItemViewController{
return controller.itemIndex
}
return -1
}
func currentController() -> UIViewController? {
if (self.pageViewController?.viewControllers?.count)! > 0{
return self.pageViewController?.viewControllers![0]
}
return nil
}
func getItemController(_ itemIndex: Int) -> ItemViewController? {
if itemIndex < Contentimages.count {
let pageItemController = self.storyboard?.instantiateViewController(withIdentifier: "ItemController") as! ItemViewController
pageItemController.itemIndex = itemIndex
pageItemController.imageName = Contentimages[itemIndex]
return pageItemController
}
return nil
}
}
项目ViewController.swift
导入 UIKit
class 项目ViewController:UIViewController {
var itemIndex: Int = 0;
var imageName: String = ""{
didSet{
if let imageView = contentImageView{
imageView.image = UIImage(named : imageName)
}
}
}
@IBOutlet var contentImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
contentImageView.image = UIImage(named : imageName)
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
您可以在 ItemViewController 上添加此按钮。然后根据当前页面使按钮隐藏或可见。像这样:
let pageItemController = self.currentController()
let currentPage = self.currentControllerIndex()
if currentPage == Contentimages.count - 1 {
pageItemController.button.isHidden = false
} else {
pageItemController.button.isHidden = true
}
例如这里(如果我正确理解你的代码):
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerAfter viewController: UIViewController) -> UIViewController? {
let itemController = viewController as! ItemViewController
if itemController.itemIndex == Contentimages.count - 1 {
itemController.button.isHidden = false
} else {
itemController.button.isHidden = true
}
if itemController.itemIndex+1 < Contentimages.count {
return getItemController(itemController.itemIndex+1)
}
return nil
}
尝试使用 UICollectionView
来实现:
1. UIViewController
包含 UICollectionView
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout
{
override func viewDidLoad()
{
super.viewDidLoad()
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{
return 3
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CustomCollectionCell
if indexPath.row == collectionView.numberOfItems(inSection: indexPath.section) - 1
{
cell.letsGoButton.isHidden = false
}
else
{
cell.letsGoButton.isHidden = true
}
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
{
return CGSize(width: collectionView.bounds.width, height: collectionView.bounds.height)
}
}
2。自定义 UICollectionViewCell
class CustomCollectionCell : UICollectionViewCell
{
@IBOutlet weak var letsGoButton: UIButton!
}
3。查看层次结构
4.需要记住的事情
- 不要忘记设置
UICollectionView
的 dataSource
和 delegate
。
- 在
Storyboard
中将 Collection View Flow Layout
设置为 Horizontal
。
我完成了一个基于送餐的项目 app.I 添加了我的 3 张图像,它们位于视图控制器及其页面视图控制器中,因为我希望我的图像水平滑动。
我问这个问题的主要目的是我需要在最后一张图片中有一个按钮 view.Please 为我提供添加仅在最后一张图片中可见的 UIButton 的完整代码。 例如 - :
(Lets Go) 是一个按钮,在关于按钮放置的最后一张图片 view.Forget 中可用。
提前致谢....
我的代码是这样的-:
ViewController.swift
导入 UIKit
class ViewController: UIViewController , UIPageViewControllerDataSource{
var pageViewController : UIPageViewController?
let Contentimages = ["splash","up","viewpage_bg"]
override func viewDidLoad() {
super.viewDidLoad()
createpageViewController()
setupPageControl()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func createpageViewController(){
let pageController = self.storyboard?.instantiateViewController(withIdentifier: "pageController") as! UIPageViewController
pageController.dataSource = self
if Contentimages.count > 0 {
let firstController = getItemController(0)!
let startingViewController = [firstController]
pageController.setViewControllers(startingViewController, direction: UIPageViewControllerNavigationDirection.forward, animated: false, completion: nil)
}
pageViewController = pageController
addChildViewController(pageViewController!)
self.view.addSubview(pageViewController!.view)
pageViewController?.didMove(toParentViewController: self)
}
func setupPageControl(){
let appearance = UIPageControl.appearance()
appearance.pageIndicatorTintColor=UIColor.gray
appearance.currentPageIndicatorTintColor=UIColor.white
appearance.backgroundColor=UIColor.darkGray
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
let itemController = viewController as! ItemViewController
if itemController.itemIndex > 0
{
return getItemController(itemController.itemIndex-1)
}
return nil
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
let itemController = viewController as! ItemViewController
if itemController.itemIndex+1 < Contentimages.count
{
return getItemController(itemController.itemIndex+1)
}
return nil
}
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return Contentimages.count
}
func presentationIndex(for pageViewController: UIPageViewController) -> Int {
return 0
}
func currentControllerIndex() -> Int {
let pageItemController = self.currentController()
if let controller = pageItemController as?ItemViewController{
return controller.itemIndex
}
return -1
}
func currentController() -> UIViewController? {
if (self.pageViewController?.viewControllers?.count)! > 0{
return self.pageViewController?.viewControllers![0]
}
return nil
}
func getItemController(_ itemIndex: Int) -> ItemViewController? {
if itemIndex < Contentimages.count {
let pageItemController = self.storyboard?.instantiateViewController(withIdentifier: "ItemController") as! ItemViewController
pageItemController.itemIndex = itemIndex
pageItemController.imageName = Contentimages[itemIndex]
return pageItemController
}
return nil
}
}
项目ViewController.swift
导入 UIKit
class 项目ViewController:UIViewController {
var itemIndex: Int = 0;
var imageName: String = ""{
didSet{
if let imageView = contentImageView{
imageView.image = UIImage(named : imageName)
}
}
}
@IBOutlet var contentImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
contentImageView.image = UIImage(named : imageName)
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
您可以在 ItemViewController 上添加此按钮。然后根据当前页面使按钮隐藏或可见。像这样:
let pageItemController = self.currentController()
let currentPage = self.currentControllerIndex()
if currentPage == Contentimages.count - 1 {
pageItemController.button.isHidden = false
} else {
pageItemController.button.isHidden = true
}
例如这里(如果我正确理解你的代码):
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerAfter viewController: UIViewController) -> UIViewController? {
let itemController = viewController as! ItemViewController
if itemController.itemIndex == Contentimages.count - 1 {
itemController.button.isHidden = false
} else {
itemController.button.isHidden = true
}
if itemController.itemIndex+1 < Contentimages.count {
return getItemController(itemController.itemIndex+1)
}
return nil
}
尝试使用 UICollectionView
来实现:
1. UIViewController
包含 UICollectionView
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout
{
override func viewDidLoad()
{
super.viewDidLoad()
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{
return 3
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CustomCollectionCell
if indexPath.row == collectionView.numberOfItems(inSection: indexPath.section) - 1
{
cell.letsGoButton.isHidden = false
}
else
{
cell.letsGoButton.isHidden = true
}
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
{
return CGSize(width: collectionView.bounds.width, height: collectionView.bounds.height)
}
}
2。自定义 UICollectionViewCell
class CustomCollectionCell : UICollectionViewCell
{
@IBOutlet weak var letsGoButton: UIButton!
}
3。查看层次结构
4.需要记住的事情
- 不要忘记设置
UICollectionView
的dataSource
和delegate
。 - 在
Storyboard
中将Collection View Flow Layout
设置为Horizontal
。