คลาสที่กำหนดเอง UIPageControl - พบว่าไม่มีการเปลี่ยนรูปภาพเป็นจุด

ฉันจำเป็นต้องใช้ UIPageControl กับรูปภาพที่กำหนดเองแทนจุดปกติ ดังนั้นฉันจึงสร้างคลาสที่กำหนดเองและเชื่อมต่อมันผ่านกระดานเรื่องราว เนื่องจาก iOS7 มุมมองย่อยของ UIPageControl มี UIView แทนที่จะเป็น UIImageView การดูย่อยของผลลัพธ์ UIView(UIIpageControl การดูย่อย) ไม่มีการดูย่อยใด ๆ ดังนั้นฉันจึงได้รับข้อผิดพลาด:

ข้อผิดพลาดร้ายแรง: พบศูนย์โดยไม่คาดคิดขณะแกะค่าเผื่อเลือก

ฉันอาจจะผิดตรงไหน?

class WhitePageControl:UIPageControl{
   let activeImage = UIImage(named: "dot_white")
   let inactiveImage = UIImage(named: "dot_white_e")

   override init(frame: CGRect){
     super.init(frame: frame)
   }

   required init(coder aDecoder: NSCoder){
     super.init(coder: aDecoder)
   }

   func updateDots(){
     println(self.subviews.count) // 3
     println(self.numberOfPages) // 3
     for var index = 0; index < self.subviews.count; index++ {
        println(index)
        var dot:UIImageView!
        var dotView:UIView = self.subviews[index] as UIView
        println("1")
        for subview in dotView.subviews{ // NIL HERE
            println("2")
            if subview.isKindOfClass(UIImageView){
                println("3")
                dot = subview as UIImageView
                if index == self.currentPage{ dot.image = activeImage }
                else{ dot.image = inactiveImage }
            }
            }
         }
       }

    func setCurrentPage(value:Int){
        super.currentPage = value
        self.updateDots()
    }
}

person Marco    schedule 14.01.2015    source แหล่งที่มา
comment
คุณพบวิธีแก้ปัญหาหรือไม่?   -  person Abhishek    schedule 30.04.2015


คำตอบ (2)


มันเป็นวิธีแก้ปัญหาของฉัน:

import Foundation

class PageControl: UIPageControl {
    var activeImage: UIImage!
    var inactiveImage: UIImage!
    override var currentPage: Int {
        //willSet {
        didSet { //so updates will take place after page changed
            self.updateDots()
        }
    }

    convenience init(activeImage: UIImage, inactiveImage: UIImage) {
        self.init()

        self.activeImage = activeImage
        self.inactiveImage = inactiveImage

        self.pageIndicatorTintColor = UIColor.clearColor()
        self.currentPageIndicatorTintColor = UIColor.clearColor()
    }

    func updateDots() {
        for var i = 0; i < count(subviews); i++ {
            var view: UIView = subviews[i] as! UIView
            if count(view.subviews) == 0 {
                self.addImageViewOnDotView(view, imageSize: activeImage.size)
            }
            var imageView: UIImageView = view.subviews.first as! UIImageView
            imageView.image = self.currentPage == i ? activeImage : inactiveImage
        }
    }

    // MARK: - Private

    func addImageViewOnDotView(view: UIView, imageSize: CGSize) {
        var frame = view.frame
        frame.origin = CGPointZero
        frame.size = imageSize

        var imageView = UIImageView(frame: frame)
        imageView.contentMode = UIViewContentMode.Center
        view.addSubview(imageView)
    }

}
person Ilya    schedule 28.05.2015
comment
เมื่อเลื่อน self.currentPage ไม่ถูกต้อง ฉันเลื่อนไปที่หน้า 1 แต่ self.currentPage ยังคงเป็น 0 - person lee; 31.07.2015
comment
คุณจะแนะนำอะไรในการควบคุมหน้าด้วย UIView ที่กำหนดเองพร้อม ImageView และ Label เป็นหมายเลขหน้า เป็นไปได้ไหม? - person Rhenz; 11.08.2016
comment
ทำงานให้ฉันด้วย ... ขอบคุณ ฉันได้แก้ไข (@IBDesignable) เพื่อให้สามารถใช้มันในกระดานเรื่องราวได้ ใช้งานได้ดี :-) - person James Laurenstin; 07.10.2016
comment
@JamesLaurenstin โปรดช่วยแชร์ (@IBDesignable) ในนี้ได้ไหม - person CAN; 17.11.2016

เปลี่ยน setCurrentPage เป็น Current Page bcoz อันนั้นเป็นคุณสมบัติ Obj C

 func currentPage(page: Int) {
    super.currentPage = page
    self.updateDots()
}

ลองสิ่งนี้

person learnig kid    schedule 21.07.2016