web-dev-qa-db-fra.com

Comment créer un UIScrollView par programme?

Très bien, donc la clé ici est que je n'utilise pas du tout IB, car la vue avec laquelle je travaille est créée par programme. Le UIView couvre la moitié inférieure de l'écran et contient un tas de boutons. Cependant, je veux ajouter plus de boutons au UIView, sans l'agrandir. Pour ce faire, je veux créer un UIScrollView à l'intérieur de la vue, ce qui me permettra d'ajouter plus de boutons hors écran pour que l'utilisateur puisse y faire défiler. Je pense que c'est comme ça que ça fonctionne.

self.manaView = [[[UIView alloc] initWithFrame:frame] autorelease];
self.manaView.backgroundColor = [UIColor purpleColor];

UIScrollView *scroll = [UIScrollView alloc];
scroll.contentSize = CGSizeMake(320, 400);
scroll.showsHorizontalScrollIndicator = YES;
[self.manaView addSubview:scroll];

La première partie du code initialise mon UIView, ce qui fonctionne très bien, mais je ne sais pas comment créer le UIScrollView par programme et l'ajouter à la vue, puis ajouter les boutons à il.

UIButton *ret2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
ret2.tag = 102;
ret2.frame = CGRectMake(255, 5, 60, 50);
[ret2 setTitle:@"Return" forState:UIControlStateNormal];
[ret2 addTarget:self action:@selector(flipAction:) forControlEvents:UIControlEventTouchUpInside];
[scroll addSubview:ret2];

Quand je l'ai fait, le bouton a tout simplement disparu de mon écran. Alors, comment dois-je procéder correctement? Merci de votre aide!

38
Ethan Mick

Au lieu de:

UIScrollView *scroll = [UIScrollView alloc];

faites ceci (en définissant le cadre à la taille que vous souhaitez que la vue de défilement soit):

UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:...];
26
Ole Begemann

Cela peut vous être utile pour créer par programmation uiscrollview
http://unconditionalloop.blogspot.com/2011/04/uiscrollview-programmatically.html

  UIScrollView *scrollview = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];   
     NSInteger viewcount= 4;  
     for(int i = 0; i< viewcount; i++) { 

        CGFloat y = i * self.view.frame.size.height;  
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, y,self.view.frame.size.width, self .view.frame.size.height)];       
        view.backgroundColor = [UIColor greenColor];  
        [scrollview addSubview:view];  
        [view release];  
     }    
  scrollview.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height *viewcount);   
  [self.view addSubview:scrollview];
24
Aravindhan

essaye ça,

{

        scrollview=[[UIScrollView alloc]initWithFrame:CGRectMake(0,0,320,480)]; 
        scrollview.showsVerticalScrollIndicator=YES;
        scrollview.scrollEnabled=YES;
        scrollview.userInteractionEnabled=YES;
        [self.view addSubview:scrollview];
        scrollview.contentSize = CGSizeMake(width,height);

    [scrollview release];
}
12
NANNAV

Créer une UiScrollView par programmation

ScrView = [[UIScrollView alloc]initWithFrame:CGRectMake(self.view.frame.Origin.x, self.view.frame.Origin.y, self.view.frame.size.width, self.view.frame.size.height)];
ScrView.showsVerticalScrollIndicator=YES;
[ScrView setBackgroundColor:[UIColor yellowColor]];
[ScrView setScrollEnabled:YES];
[ScrView setContentSize:CGSizeMake(0, 700)];
[ScrView setShowsHorizontalScrollIndicator:YES];
[ScrView setShowsVerticalScrollIndicator:YES];
[self.view addSubview:ScrView];
4
Kiran Bhoraniya

J'utilise lazy beaucoup lors de la création d'interface utilisateur par programme, comme ceci:

class WorldViewController: UIViewController {
    override func loadView() {
        super.loadView()
        view = scrollView
        scrollView.addSubview(label0)
    }

    lazy var scrollView: UIScrollView = {
        let instance = UIScrollView()
        instance.backgroundColor = UIColor.blackColor()
        return instance
    }()

    lazy var label0: UILabel = {
        let instance = UILabel()
        instance.text = "Ice caps are melting"
        instance.textColor = UIColor.whiteColor()
        instance.sizeToFit()
        return instance
    }()

    var needLayoutContent = true

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        if needLayoutContent {
            let bounds = scrollView.bounds
            let contentSize = CGSizeMake(bounds.width * 1.5, bounds.height * 1.5)
            label0.center = CGPointMake(contentSize.width / 2, contentSize.height / 2)
            scrollView.contentSize = contentSize
            scrollView.contentOffset = CGPointMake(bounds.width * 0.25, bounds.height * 0.25)
            needLayoutContent = false
        }
    }
}
2
neoneye

Méthode simple: vous pouvez créer plusieurs fois si vous en avez besoin de plus

- (void)viewDidLoad
{
    [super viewDidLoad];

    int x = 0;
    int y = 10;
    for(int i=0; i<5; i++)
    {
        UIScrollView *scrollview=[[UIScrollView alloc]initWithFrame:CGRectMake(x, y, 50, 50)];
        scrollview.showsVerticalScrollIndicator=YES;
        scrollview.scrollEnabled=YES;
        scrollview.userInteractionEnabled=YES;
        scrollview.backgroundColor = [UIColor greenColor];
        [self.view addSubview:scrollview];
        //scrollview.contentSize = CGSizeMake(50,50);
        x=x+55;

        //[self myscrollView];
    }
}
0
Rajesh Loganathan