2011-05-26 30 views
1

使用Erica Sadun的滾動視圖示例我創建了一個項目。 我現在在我的項目中有一個滾動視圖和一個頁面控件。 我爲每個頁面創建一個新視圖並將其添加到我的滾動視圖中,如下所示。 每個視圖有5個按鈕,所以我可以滾動5個5. 但是,按鈕似乎沒有啓用。 任何想法爲什麼?ScrollView中的按鈕未啓用

// Create the scroll view and set its content size and delegate 
    sv = [[[UIScrollView alloc] initWithFrame:CGRectMake(0.0f, 200.0f, 300.0f, 60.0f)] autorelease]; 
    sv.contentSize = CGSizeMake(NPAGES * 300.0f, sv.frame.size.height); 
    sv.pagingEnabled = YES; 
    sv.delegate = self; 


    // Load in all the pages 
    for (int i = 0; i < NPAGES; i++) 
    { 
     UIView *menuView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 300.0f, 60.0f)]; 


    for (int j = 0; j < 5 * (i+1); j++) 
     { 
      UIImage *menuImage = [UIImage imageNamed:@"menuimage.png"]; 
      UIImage *menuImage2 = [UIImage imageNamed:@"menuimageselected.png"]; 
UIButton *menuButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain]; 

      menuButton.frame = CGRectMake(j * 60.0f, 0.0f, 60.0f, 60.0f); 
      [menuButton addTarget:self action:@selector(menuButtonClicked) forControlEvents:UIControlEventTouchUpInside]; 


     menuButton.tag = j + 5 * i; 

      menuButton.backgroundColor = [UIColor clearColor]; 
      [menuButton setImage:menuImage forState:UIControlStateNormal]; 
      [menuButton setImage:menuImage2 forState:UIControlStateSelected]; 
      [menuButton setImage:menuImage2 forState:UIControlStateHighlighted]; 
      [menuButton setEnabled:YES]; 


      [menuImage release]; 
      [menuButton release]; 
      [menuView addSubview:menuButton]; 

     } 

     [sv addSubview:menuView]; 
     [sv bringSubviewToFront:menuView]; 

     [menuView release]; 

    } 

    [self.view addSubview:sv]; 
+0

你怎麼說他們沒有啓用? – visakh7 2011-05-26 12:10:52

+1

在這裏,你還沒有實現任何選擇器,所以你怎麼說這個按鈕沒有啓用?請再次詳細說明你想要做什麼。 – rptwsthi 2011-05-26 12:11:04

+0

這段代碼中有太多的錯誤1.永遠不要試圖保留一個按鈕2.我不認爲你會在你的第二頁上得到任何東西,因爲你的menuView.frame.origin.x始終爲0 3.你需要添加您的按鈕觸摸事件的目標 – 2011-05-26 12:16:46

回答

1

我改變我加入到視圖的框架解決了這個問題我的滾動視圖。 所以不是這一行:

UIView *menuView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 300.0f, 60.0f)]; 

我現在做的看法改變它的框架每次我改變頁面:

UIView *menuView = [[UIView alloc] initWithFrame:CGRectMake(i * 300.0f, 0.0f, 300.0f, 60.0f)]; 

這樣的原因是與視圖的幀的位置有關我正在添加到滾動視圖。滾動視圖與分頁一起使用時,似乎會出現此問題。當頁面發生變化時,確保滾動視圖內的視圖也移動到同一幀。

0

試試這個代碼

for (int i = 0; i < NPAGES; i++) 
{ 
    UIView *menuView = [[[UIView alloc] initWithFrame:CGRectMake(i * 300.0f, 0.0f, 300.0f, 60.0f)] autorelease]; 

    for (j = 0; j < 5 ; j++) 
    { 
     UIImage *menuImage = [UIImage imageNamed:@"menuimage.png"]; 
     UIImage *menuImage2 = [UIImage imageNamed:@"menuimageselected.png"]; 
     UIButton *menuButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
     menuButton.frame = CGRectMake(j * 60.0f, 0.0f, 60.0f, 60.0f); 
     menuButton.backgroundColor = [UIColor clearColor]; 
     [menuButton setImage:menuImage forState:UIControlStateNormal]; 
     [menuButton setImage:menuImage2 forState:UIControlStateHighlighted]; 
     [menuButton setEnabled:YES]; 
     [menuButton addTarget:self action:@selector(someSelector) forControlEvents:UIControlEventTouchUpInside]; 

     [menuView addSubview:menuButton]; 
    } 

    [sv addSubview:menuView]; 
} 

,並請確認命名爲menuimage.pngmenuimageselected.png兩個圖像的存在。

+0

抱歉,但這並沒有做任何關於按鈕的工作。它只會改變按鈕的位置。這與我的問題沒有關係 – tiw 2011-05-26 12:38:05

+0

相同的代碼工作正常與我通過更改兩個圖像驗證jsut – 2011-05-26 12:40:06

+0

嘗試此[menuButton setImage:menuImage2 forState:UIControlStateHighlighted]; – 2011-05-26 12:51:19

1

要更改觸摸圖像使用

[menuButton setImage:menuImage2 forState:UIControlStateHighlighted]; 

還要確保您有menubutton.showTouchOnHighlight = YES;

menuButton.adjustImageWhenHighlighted = YES; 

也許需要滾動視圖的觸摸事件。試試這些

scrollView.delaysContentTouches = NO; 
scrollView.canCancelContentTouches = NO; 
+0

抱歉,即使您沒有爲高亮或啓用添加單獨的圖像,默認情況下按鈕會出現一個。 – tiw 2011-05-26 12:37:15

+0

查看我的更新 – visakh7 2011-05-26 12:42:15

0

請您實現滾動視圖

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
    btn.frame = CGRectMake(X, Y, Width, Height); 
    btn.tag = //your tag Number; 
    [btn addTarget:self action:@selector(showGameDetail:) forControlEvents:UIControlEventTouchUpInside]; 

這裏面的代碼,並添加這個方法

-(IBAction)showGameDetail:(id)sender 
{ 
    //Your Code 
} 
0
[menuImage release]; 

menuImage不應該釋放。它來自`[UIImage imageNamed:],它是一個自動釋放的對象。它會導致圖像過度釋放。

0

試試這個,我不確定它是否適用於你的情況。

[scrollView bringSubviewToFront:button]; 
0
  1. 我將宣佈 「J」 的 「爲」 括號內。

  2. 您正在保留UIButton,然後釋放它。你也不需要做,因爲你沒有分配它。

  3. 你不應該發佈「menuImage」。

  4. 您正在將「menuImage2」分配給UIButton的選定狀態。它應該是UIControlStateHighlighted。

編輯:

不這樣做:

[menuImage release]; 
[menuButton release]; 

也試試這個:

 
- (void) menuButtonClicked: (id) sender { 

    UIButton *btn = (UIButton *)sender; 
    NSLog(@"clicked %d",[btn tag]); 
} 
+0

查看我更新的代碼,這些在按鈕沒有反應觸摸並不重要.. – tiw 2011-05-26 14:15:55

+0

其實它很重要。嘗試「for(int j = 0; j <5 *(i + 1); j ++)」並親自查看。 – Desdenova 2011-05-26 14:23:00

+0

我明白了。但它仍然不適用於所有按鈕。但只適用於第一頁上的內容。當你在menuButtonClicked函數中添加這些行時,你會看到。 - (IBAction)menuButtonClicked:(id)sender { \t UIButton * btn = sender; NSLog(@「clicked%d」,[sender tag]); } – tiw 2011-05-26 14:56:45