2013-06-20 38 views
3

我正在嘗試以編程方式創建UIScrollView。我設置了一個屬性並將其合成。以編程方式創建UIScrollView

@property (weak, nonatomic) IBOutlet UIScrollView *topScrollView; 
@synthesize topScrollView; 

然後我有一個方法可以做到這一點。

[topScrollView setFrame:CGRectMake(320, 0, 320, 65)]; 
[topScrollView setContentSize:CGSizeMake(500, 100)]; 
[topScrollView setBackgroundColor:[UIColor greenColor]]; 
[topScrollView setScrollEnabled:YES]; 
[topScrollView setShowsHorizontalScrollIndicator:YES]; 
[topScrollView setShowsVerticalScrollIndicator:NO]; 
[[self view] addSubview:topScrollView]; 

我把它放在viewDidLoad中。 這不會創建滾動視圖。我認爲這是因爲滾動視圖尚未初始化。我可以在上面的方法中進行分配和初始化,但是當我想以另一種方法使用它時,它將無法工作。我看着Programmatically added UIScrollView used in multiple methods,但沒有太多幫助。可能有一個我不知道的簡單解決方案。我能做什麼來以編程方式創建這個滾動視圖,並能夠在另一種方法中使用它(主要是用它來執行動畫)。

感謝,

伊萬

+0

附註了滾動的代表 - 擺脫IBOutlet'的'。這隻在使用Interface Builder時才需要,而不是以編程方式創建。 – rmaddy

+0

@rmaddy爲了完整起見,應該說'IBOutlet'不會傷害任何東西,並且它可能會讓你*從* .xib或storyboard設置滾動視圖。 – Caleb

回答

2

我想這是因爲滾動視圖尚未初始化。

沒錯。

我可以在上面的方法中進行分配和初始化,但是當我想在另一種方法中使用它時,它不會工作。

它會如果您將新鑄造的滾動視圖分配給屬性或實例變量。這就是他們的目的。

哦,另一件事。您需要確保您的滾動視圖以某種方式保留。這意味着將您的topScrollView屬性更改爲strong,或者將其添加到視圖(然後保留它)或兩者。

+0

好吧,所以我創建了實例變量:UIScrollView * topScrollView; ,並能夠得到它的工作。我後來用topScrollView = [[UIScrollView alloc] init]初始化它;這工作。您對這些物業提出的其他建議,我必須在那裏做些什麼? –

0

簡單的方法: 您可以創建多個次,如果你需要意味着

- (void)scrollView 
{ 

    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; 
    } 
} 
0

您可以使用下面的代碼添加的UIScrollView上yourView: -

第1步:

Delegate "UIScrollViewDelegate" to your ViewController.h 

for example: 
    @interface yourViewController:UIViewController<UIScrollViewDelegate> 

第2步:

//create you UIScrollView 
UIScrollView *MyScrollVw= [[UIScrollView alloc]initWithFrame:CGRectMake(0 ,0 ,320 ,480)]; 
MyScrollVw.delegate= self; 
[MyScrollVw setShowsHorizontalScrollIndicator:NO]; 
[MyScrollVw setShowsVerticalScrollIndicator:YES]; 
MyScrollVw.scrollEnabled= YES; 
MyScrollVw.userInteractionEnabled= YES; 
[yourView addSubview:MyScrollVw]; 
MyScrollVw.contentSize= CGSizeMake(320 ,1500);//(width,height) 

第3步:

要實現在ViewController.m

-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ 
    return imgView; 
} 
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ 
    NSLog(@"Did end decelerating"); 
    //do your code here 
} 
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ 
    NSLog(@"Did scroll"); 
    //do your code here 
} 
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ 
    NSLog(@"Did end dragging"); 
    //do your code here 
} 
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{ 
    NSLog(@"Did begin decelerating"); 
    //do your code here 
} 
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ 
    NSLog(@"Did begin dragging"); 
    //do your code here 
}