iphone - UIScrollView 中的 UIButtons 停止滚动,如何修复?

标签 iphone cocoa-touch scroll uiscrollview uibutton

我在向 UIScrollView 添加一组 UIButtons 时遇到问题。添加按钮后,滚动命令似乎没有传递到 ScrollView ,因为按钮覆盖了整个表面。我读过有关此的各种帖子,但仍然无法弄清楚。我对 iPhone 编程还很陌生,所以可能有一些明显的东西我错过了。我尝试过将 canCancelContentTouchesdelaysContentTouches 设为 TRUEFALSE

这是我用来将按钮添加到 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");

}

对此的任何帮助将不胜感激。我只需要解决这个问题即可完成我的应用程序。

最佳答案

如果按钮覆盖整个表面,您就不能指望 ScrollView 接收事件。(它们将成为响应者链中的第一个)。快速解决方法是使按钮比 ScrollView 稍小。

第一次读到这个问题时,我以为您想将按钮添加到 ScrollView 的 super View 中 - 但后来我意识到您实际上想要 ScrollView 中的按钮。

关于iphone - UIScrollView 中的 UIButtons 停止滚动,如何修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2226186/

相关文章:

ios - 在 iOS swift 中更新应用程序时通过 CFBundleShortVersionString 获取以前的版本而不是最新版本

objective-c - NSPredicate 对数组进行排序并按 DESC 顺序

xcode - 在 Storyboard中使用浮点值

objective-c - UIButton 不可点击

java Selenium 。禁用页面自动滚动

css - 在下拉菜单选项上添加滚动条

ios - 如何首先在容器页面 View Controller 内实例化任何 View ?

iOS 7、iPhone、接近传感器

javascript - 禁止滚动文本

iphone - 如何在 UIWebView 中正确显示 TXT 或 ASCII 文件