2010-02-09 63 views
3

我在將一組UIButtons添加到UIScrollView時遇到問題。隨着添加按鈕,似乎滾動命令沒有被傳遞到滾動視圖,因爲按鈕覆蓋整個表面。我已閱讀各種帖子,但仍無法解決。我對iPhone編程非常陌生,所以可能有些顯而易見的東西我錯過了。我已經嘗試過像canCancelContentTouchesdelaysContentTouchesTRUEFALSEUIScrollView中的UIButtons停止滾動,如何解決?

這裏是我用來將按鈕添加到UIScrollView的代碼。該UIScrollView在IB創建並傳遞給函數:

-(void)drawCharacters:(NSMutableArray *)chars:(UIScrollView *)target_view { 
//NSLog(@"CLEARING PREVIOUS BUTTONS"); 
//clear previous buttons for parts/kanji 
if(target_view == viewParts){ 
    for (UIButton *btn in parts_buttons) { 
     [btn removeFromSuperview]; 
    } 
    [parts_buttons removeAllObjects]; 
} else if(target_view == viewKanji){ 
    for (UIButton *btn in kanji_buttons) { 
     [btn removeFromSuperview]; 
    } 
    [kanji_buttons removeAllObjects]; 
} 
//display options 
int chars_per_line = 9; //change this to change the number of chars displayed on each line 
if(target_view == viewKanji){ 
    chars_per_line = 8; 
} 
int char_gap = 0; //change this to change the margin between chars 
int char_dimensions = (320/chars_per_line)-(char_gap*2); 
//set starting x, y coords 
int x = 0, y = 0; 
//increment y coord 
y += char_gap; 
//NSLog(@"ABOUT TO DRAW FIRST BUTTON"); 
for(NSMutableArray *char_arr in chars){ 
    //increment x coord 
    x += char_gap; 
    //draw at x and y 
    UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    myButton.frame = CGRectMake(x, y, char_dimensions, char_dimensions); // position in the parent view and set the size of the button 
    [myButton setTitle:[char_arr objectAtIndex:0] forState:UIControlStateNormal]; 
    [myButton setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal]; 
    [myButton setTitleColor:[UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:1.0] forState:UIControlStateDisabled]; 
    myButton.titleLabel.font = [UIFont boldSystemFontOfSize:22]; 
    if(target_view == viewKanji){ 
     myButton.titleLabel.font = [UIFont boldSystemFontOfSize:30]; 
    } 
    // add targets and actions 
    if(target_view == viewParts){ 
     [myButton addTarget:self action:@selector(partSelected:) forControlEvents:UIControlEventTouchUpInside]; 
    } else if(target_view == viewKanji){ 
     [myButton addTarget:self action:@selector(kanjiSelected:) forControlEvents:UIControlEventTouchUpInside]; 
     [myButton setTag:(int)[char_arr objectAtIndex:1]]; 
    } 

    //if the part isnt in the current list of kanji, disable and dim it 
    if(target_view == viewParts){ 
     if([kanji count] > 0){ 
      [myButton setEnabled:NO]; 
     } 
     bool do_break = NO; 
     for(NSMutableArray *arr in kanji){ 
      //NSLog([NSString stringWithFormat:@"CHECKING PARTS AGAINST %d KANJI", [kanji count]]); 
      for(NSString *str in [[arr objectAtIndex:2] componentsSeparatedByString:@" "]){ 
       if(([myButton.titleLabel.text isEqualToString:str])){ 
        //NSLog(@"--------------MATCH!!!-----------------"); 
        [myButton setEnabled:YES]; 
        for(NSString *str1 in parts_selected){ 
         if(([myButton.titleLabel.text isEqualToString:str1])){ 
          [myButton setEnabled:NO]; 
          break; 
         } 
        } 
        do_break = YES; 
        break; 
       } 
       if(do_break) break; 
      } 
      if(do_break) break; 
     } 
    } 
    // add to a view 
    [target_view addSubview:myButton]; 
    //update coords of next button 
    x += char_dimensions+ char_gap; 
    if (x > (320-char_dimensions)) { 
     x = 0; 
     y += char_dimensions + (char_gap*2); 
    } 
    //add button to global array to be removed from view next update 
    if(target_view == viewParts){ 
     [parts_buttons addObject:myButton]; 
    } else if(target_view == viewKanji){ 
     [kanji_buttons addObject:myButton]; 
    } 
} 
//NSLog(@"FINISHED DRAWING ALL BUTTONS"); 

}

任何幫助,在此將不勝感激。我只需要解決這個問題來完成我的應用程序。

回答

0

如果按鈕覆蓋整個表面,您不能指望scrollview接收事件(它們將成爲響應者鏈中的第一個)。快速修復將使按鈕略小於滾動視圖。

在這個問題上,我想,你想按鈕添加到滾動視圖的上海華的第一次讀 - 後來我才知道你真正想要的滾動視圖按鈕。

+0

好的,我傻了,我搞定了。我沒有意識到我需要爲滾動視圖設置內部大小。一旦我做完了,它沒有任何問題。基本上我使用: target_view.contentSize = CGSizeMake(target_view.frame.size.width,the_coords_of_my_last_button +高度); 感謝您的回覆David。 – Marky 2010-02-19 07:00:50

+0

有關更好的答案,請參見http://stackoverflow.com/a/3550157/908621 – fishinear 2013-03-22 17:47:43