Ok, así que estoy luchando aquí y no he sido capaz de encontrar una solución de trabajo. He sido auto aprendizaje Swift sin Objetivo C a la experiencia (lo sé, lo sé).

En mi app, tengo mi principal UIViewController, una subvista que es transparente, pero las diapositivas en la parte inferior de la pantalla y, a continuación, 4 subvistas de la corredera subvista que están trabajando UIScrollViews. He paginación activada y funciona genial, pero me gustaría añadir un UIPageControl para cada uno de ellos. Yo en serio no puede comprender los delegados y cómo implementar el uso de swift. Cualquier ayuda sería muy apreciada!

También, estoy haciendo todo esto mediante programación, por lo que no IB por favor. Feliz de proporcionar el código si te ayuda. Gracias

InformationsquelleAutor Ross Isdaner | 2014-07-17

4 Comentarios

  1. 26

    Creo que usted y/o cualquier otra persona buscando cómo hacer esto se encuentran esta respuesta útil. El código de ejemplo me permitió crear una página de control de indicadores sobre mi scrollView, y era la primera vez que el intento de hacer esto. Me pareció muy claro.

    Las líneas que usted probablemente tendrá que añadir a su proyecto son:

    1: agregar UIScrollViewDelegate como un protocolo al primer nombre de su controlador de vista de clase.

    2: en la declaración de la clase crear un pageControl variable. Usted tendrá que jugar con los números de fotograma para llegar a aparecer cuando usted lo desee. los actuales números uno en el centro de la ventana para mí.
    Para la referencia de los números de la media (posición x de la esquina superior izquierda del indicador, la coordenada y de la esquina superior izquierda, la anchura de la página el indicador, altura del indicador de página)

    var pageControl : UIPageControl = UIPageControl(frame: CGRectMake(50, 300, 200, 20))

    1. en viewDidLoad establecer el scrollView delegado y de la llamada `configurePageControl():

      override func viewDidLoad() {
          super.viewDidLoad()
      
          scrollView.delegate = self
      
          configurePageControl()
      }
    2. necesita agregar dos métodos después de viewDidLoad. uno se llama en viewDidLoad

      func configurePageControl() {
           self.pageControl.numberOfPages = <some reference to the number of pages>
           self.pageControl.currentPage = 0
           self.pageControl.tintColor = UIColor.redColor()
           self.pageControl.pageIndicatorTintColor = UIColor.blackColor()
           self.pageControl.currentPageIndicatorTintColor = UIColor.greenColor()     
           self.view.addSubview(pageControl)
       }

      y

       func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
          let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
          pageControl.currentPage = Int(pageNumber)
      }

    El scrollView delegado en realidad es muy sencillo de configurar. Agregar UIScollViewDelegate como un protocolo que el ViewController clase implementará mediante la adición después de la declaración de la clase: class YourClassName: UIScrollViewDelegate. Y, a continuación, en viewDidLoad(), que completa la configuración de delegado asignando el desplazamiento de la vista del delegado de la propiedad a tu clase con la línea de scrollView.delegate = self. (véase el ejemplo he ligado por si necesitas más aclaraciones, de donde estos comandos ir)

  2. 7

    Sólo la configuración de la misma en el código como este:

    private var pageControl = UIPageControl(frame: .zero)
    
    private func setupPageControl() {
    
        pageControl.numberOfPages = controllers.count
        pageControl.translatesAutoresizingMaskIntoConstraints = false
        pageControl.currentPageIndicatorTintColor = UIColor.orange
        pageControl.pageIndicatorTintColor = UIColor.lightGray.withAlphaComponent(0.8)
    
        let leading = NSLayoutConstraint(item: pageControl, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: 0)
        let trailing = NSLayoutConstraint(item: pageControl, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1, constant: 0)
        let bottom = NSLayoutConstraint(item: pageControl, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1, constant: 0)
    
        view.insertSubview(pageControl, at: 0)
        view.bringSubview(toFront: pageControl)
        view.addConstraints([leading, trailing, bottom])
    }
    • He logrado configurar la página de control de los indicadores de uso de su función, así que muchas gracias por eso. Sin embargo, el indicador no cambia cuando cambia la página. He intentado arreglarlo mediante el establecimiento de pageControl.currentPage siempre puedo cambiar de páginas, pero no funciona bien. Tengo 3 páginas y el indicador sigue saltando entre los dos extremos, nunca toma el valor medio. Donde he de poner pageControl.currentPage para que funcione correctamente?
    • Puede actualizar el código para pageControl.página actual en pageViewController(_:didFinishAnimating:previousViewControllers:transitionCompleted:). Usted tendrá que aplicar el PageViewControllerDelegate para que. La documentación es aquí developer.apple.com/documentation/uikit/….
  3. 0

    Delegados son sólo los métodos de una clase, que puede ser imbricado a otra clase. Estos métodos son generalmente las devoluciones de llamada.

    por ejemplo, Una devolución de llamada para un TextField, cuando el usuario llega a volver, puede ser implementado en un Delegado. El delegado puede ser implementado en la clase ViewController.

    Ahora cuando el usuario llega a devolver el Objeto TextField se llame al método de delegado en el ViewController objeto. La gran cosa acerca de esto es que usted puede tener acceso a todas las variables y métodos de la ViewController objeto de la delegada método. De lo contrario se necesitaría un identificador para el ViewController objeto en el objeto TextField en sí.

    Delegados se implementan protocolos, que son sólo las interfaces. Así que si el ViewController implementa la TextFieldDelegate protocolo, todos los textfield devoluciones de llamada pueden ser llamados desde el ViewController objeto.

    Espero que esto ayude.

    • Que sin duda comienza a! Así que en mi caso, probablemente tengo mi transparentes subvista (donde el UIPageControl vivir) implementar el delegado entonces, ¿correcto? O en caso de que acaba de entrar en el ViewController?
  4. 0

    UIPageControl Integración mediante el uso de Swift 4

    func configurePageControl() {
        self.pageview.numberOfPages = items.count
        self.pageview.currentPage = 0
        self.pageview.tintColor = UIColor.red
        self.pageview.pageIndicatorTintColor = UIColor.black
        self.pageview.currentPageIndicatorTintColor = UIColor.green
    }

Dejar respuesta

Please enter your comment!
Please enter your name here