UIScrollView
에 UIButtons
세트를 추가하는 데 문제가 있습니다. 단추를 추가하면 단추가 전체 화면을 덮을 때 스크롤 명령이 스크롤보기로 전달되지 않는 것 같습니다. 나는 이것에 대한 여러 게시물을 읽었지만 여전히 그것을 알아낼 수 없습니다. 나는 iPhone 프로그래밍에 익숙하지 않았기 때문에 내가 놓친 부분이있을 수있다. 나는 canCancelContentTouches
과 delaysContentTouches
to TRUE과 FALSE과 같은 것을 시도했다.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");
}
어떤 도움을 크게 감상 할 수있다. 내 응용 프로그램을 끝내기 위해이 문제를 해결할 필요가 있습니다.
좋아, 어리석은 나, 나는 그것을 해결했다. 스크롤 뷰의 내부 크기를 설정해야한다는 것을 알지 못했습니다. 일단 내가 그것을 했더라면 전혀 문제가 없었다. 기본적으로 나는 다음을 사용했다 : target_view.contentSize = CGSizeMake (target_view.frame.size.width, the_coords_of_my_last_button + height); 답장을 보내 주셔서 감사합니다. – Marky
더 나은 답변을 보려면 http://stackoverflow.com/a/3550157/908621을 참조하십시오. – fishinear