web-dev-qa-db-fra.com

UIScrollView par programme dans Swift

Je n'ai pas été en mesure de trouver un moyen d'activer avec précision le défilement horizontal et vertical par programmation avec Swift (mes objets sont programmatiques, ce qui rend l'utilisation de la mise en page automatique dans IB impossible).

Le tutoriel que j'ai suivi permet de faire défiler les deux sens comme prévu. Le problème est que mon bouton reste au même endroit occupant une partie de l'écran, peu importe où vous faites défiler. J'ai eu ce même résultat avec un autre tutoriel et je suis assez confus quant à la raison pour laquelle cela se produit.

Je n'ai pas pu trouver de réponse à cela, donc je suppose que d'autres trouveront cela bénéfique.

Voici le code que j'ai. J'ai fait un projet très basique basé sur ce tutoriel: http://koreyhinton.com/blog/uiscrollview-crud.html

import UIKit

class ViewController: UIViewController, UIScrollViewDelegate {


    var scrollView: UIScrollView!
    var containerView = UIView()



    override func viewDidLoad() {
        super.viewDidLoad()

    let buttonOne = UIButton.buttonWithType(UIButtonType.System) as UIButton


        buttonOne.frame = CGRectMake(10, 50, 50, 50)
        buttonOne.backgroundColor = UIColor.greenColor()
        buttonOne.setTitle("test", forState: UIControlState.Normal)
        buttonOne.addTarget(self, action: "buttonAction1x1:", forControlEvents: UIControlEvents.TouchUpInside)

        self.scrollView = UIScrollView()
        self.scrollView.delegate = self
        self.scrollView.contentSize = CGSizeMake(1000, 1000)

        containerView = UIView()


        scrollView.addSubview(containerView)
        view.addSubview(scrollView)
        self.view.addSubview(buttonOne)


    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        scrollView.frame = view.bounds
        containerView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height)
    }



    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }


}
23
user3246092

Votre code fonctionne parfaitement, mais il y a un petit problème dans l'ajout de buttonOne sur la vue.

Vous avez ajouté buttonOne sur self.view (c'est-à-dire sous-vue de self.view), pas containerView qui est sur scrollView.

Vous devez utiliser le code suivant

containerView.addSubview(buttonOne)

au lieu de

self.view.addSubview(buttonOne)
9
Pankaj purohit

Vous devez donc utiliser la ligne suivante

containerView.userInteractionEnabled = true
3
Samrez Ikram