2010-06-08 21 views
38

W porządku, więc kluczem jest to, że w ogóle nie używam IB, ponieważ widok, nad którym pracuję, jest tworzony programowo. UIView obejmuje dolną połowę ekranu i ma na sobie kilka przycisków. Jednak chcę dodać więcej przycisków do urządzenia UIView, nie zwiększając go. Aby to zrobić, chcę zrobić wewnątrz widok UIScrollView, który pozwoli mi dodać więcej przycisków poza ekranem, aby użytkownik mógł je przewijać. Myślę, że tak to działa.Jak programowo utworzyć UIScrollView?

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]; 

Pierwsza część kodu iniates mój UIView, który działa świetnie, ale nie mogę dowiedzieć się, jak zrobić UIScrollView programowo i dodać go do widoku, a następnie dodać przyciski do niego.

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]; 

Kiedy to zrobiłem, przycisk zniknął z ekranu. Więc jak mam to zrobić poprawnie? Dziękuję za pomoc!

Odpowiedz

26

Zamiast:

UIScrollView *scroll = [UIScrollView alloc]; 

to zrobić (ustawienie ramkę jednak duży chcesz widok przewijania do BE):

UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:...]; 
+1

Ahhh, musiałem mieć initwithframe AND .contentSize, aby to działało. Dziękuję Ci! –

23

może to być pomocne dla tworzenia UIScrollView programowo
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]; 
+5

Wierzę, że musisz również wykonać polecenie "[self.view addSubview: scrollview] ;, aby działał. – futurevilla216

+0

@LennyK podobno został poddany edycji w ten sposób –

12

spróbować,

{ 

     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]; 
} 
+1

Użyłem ostatniej opcji, na którą odpowiedziała NANNAV, która wyglądała, jakby działała świetnie, ale teraz widzę pasek przewijania, ale mój interfejs jest zablokowany. Oznacza to, że jedyną kontrolką, która działa, jest UIScrollView ... wszelkie pomysły ... – logixologist

0

Prosta Metoda: Można utworzyć wiele razy, jeśli potrzebujesz więcej

- (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

używam lazy dużo podczas tworzenia interfejsu programowego, tak:

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 
     } 
    } 
} 
3

Tworzenie UiScrollView Programowalnie

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];