2010-02-09 3 views
3

UIScrollViewUIButtons 세트를 추가하는 데 문제가 있습니다. 단추를 추가하면 단추가 전체 화면을 덮을 때 스크롤 명령이 스크롤보기로 전달되지 않는 것 같습니다. 나는 이것에 대한 여러 게시물을 읽었지만 여전히 그것을 알아낼 수 없습니다. 나는 iPhone 프로그래밍에 익숙하지 않았기 때문에 내가 놓친 부분이있을 수있다. 나는 canCancelContentTouchesdelaysContentTouches to TRUEFALSE과 같은 것을 시도했다.UIScrollView의 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보다 약간 작게 만드는 것입니다.

이 문제의 첫 번째 읽기에서 나는 scrollview의 수퍼 뷰에 단추를 추가하고 싶다고 생각했지만 실제로 스크롤 뷰의 단추를 원한다는 것을 깨달았습니다.

+0

좋아, 어리석은 나, 나는 그것을 해결했다. 스크롤 뷰의 내부 크기를 설정해야한다는 것을 알지 못했습니다. 일단 내가 그것을 했더라면 전혀 문제가 없었다. 기본적으로 나는 다음을 사용했다 : target_view.contentSize = CGSizeMake (target_view.frame.size.width, the_coords_of_my_last_button + height); 답장을 보내 주셔서 감사합니다. – Marky

+0

더 나은 답변을 보려면 http://stackoverflow.com/a/3550157/908621을 참조하십시오. – fishinear

관련 문제