UIButton 突然停止工作

Posted

技术标签:

【中文标题】UIButton 突然停止工作【英文标题】:UIButton suddenly stops working 【发布时间】:2013-11-21 15:47:21 【问题描述】:

所以我的照片应用中的过滤器按钮出现问题。我不完全确定为什么,但他们突然停止工作。选择器被点击时没有被调用,但我不知道为什么。几天前他们工作得很好,但由于某种原因他们现在不行了。我检查了 UIView 子视图数组,确认它在顶部。我需要一种方法来查看是否由于某种原因触摸没有到达按钮。我不知道该怎么做。

我希望我能提供更多信息,但这就是我所拥有的一切。我希望有人有一些建议,因为我对此束手无策。

提前致谢!

按钮创建方法:

-(void)createFilterButtonsForThumbnail:(UIImage *)thumbnail

    UIView *filtersContainer = self.filterContainer;
    CGRect buttonFrame = CGRectMake(kFilterFrameThickness, kFilterFrameThickness,
                                    thumbnail.size.width, thumbnail.size.height);

    CGFloat frameWidth = thumbnail.size.width+(2*kFilterFrameThickness);
    CGFloat frameHeight = kFilterPickerHeight;

    UIEdgeInsets backgroundInsets = UIEdgeInsetsMake(0, kFilterFrameThickness, 0, kFilterFrameThickness);
    UIImage *buttonBackgroundImage = [[UIImage imageNamed:@"FilmReel"] resizableImageWithCapInsets:backgroundInsets];

    for (int i = 0;i<(self.filterPaths.count+kFilterNonLookups+1);i++)


        UIImageView *buttonBackground = [[UIImageView alloc] initWithFrame:CGRectMake(kFilterSidePadding+(i*(frameWidth+kFilterSidePadding)),
                                                                            0,
                                                                            frameWidth,
                                                                            frameHeight)];
        [buttonBackground setImage:buttonBackgroundImage];

        UIButton *thumbnailButton = [[UIButton alloc] initWithFrame:buttonFrame];
        UIImage *filteredThumbnail = [self applyFilterAtIndex:i ToImage:thumbnail];

        [thumbnailButton setImage:filteredThumbnail forState:UIControlStateNormal];
        [thumbnailButton addTarget:self action:@selector(filterSelected:) forControlEvents:UIControlEventTouchUpInside];
        [thumbnailButton setTag:i];

        [buttonBackground addSubview:thumbnailButton];
        [filtersContainer addSubview:buttonBackground];
        if ((i > (kFilterProMinimumIndex)) && ([self isProVersion]) == NO)
            UIImageView *proTag = [[UIImageView alloc] initWithImage:nil];
            CGRect proFrame = CGRectMake(buttonFrame.origin.x,
                                         buttonFrame.origin.y + buttonFrame.size.height - kFilterProIconHeight-kFilterFrameThickness,
                                         kFilterProIconWidth,
                                         kFilterProIconHeight);
            [proTag setBackgroundColor:[UIColor orangeColor]];
            [proTag setFrame:proFrame];
            [thumbnailButton addSubview:proTag];
            [self.filterProTags addObject:proTag];
        
    

选择器方法:

-(void)filterSelected:(UIButton *)button

    NSLog(@"Pressed button for index %i",button.tag);
    int buttonTag = button.tag;
    if ((buttonTag < kFilterProMinimumIndex+1) || ([self isProVersion] == YES))
        [self.imageView setImage:[self applyFilterAtIndex:buttonTag ToImage:self.workingImage]];
    
    else 
        [self processProPurchaseAfterAlert];
    

【问题讨论】:

【参考方案1】:

我在其中看到了几个问题,但我不确定是哪些问题导致它崩溃。首先,您应该在 UIButton 上使用 buttonWithType: 实例化您的按钮:

UIButton *thumbnailButton = [UIButton buttonWithType:UIButtonTypeCustom];
[thumbnailButton setFrame:buttonFrame]

这是因为 UIButton 是一个类簇,你应该让操作系统给你正确的按钮。

其次,您将按钮添加为 UIImageView 的子视图,默认情况下,userInteractionEnabled 设置为 NO。

该属性继承自 UIView 父类。这节课 将此属性的默认值更改为 NO。

你应该让按钮是一个大按钮,按钮的背景是你想要的图像。

【讨论】:

我实际上已经尝试过顶部,但它没有修复它,所以我删除了它。不过,为了约定,我把它放回去了。但是背景和按钮上的 userInteractionEnabled 都设置为 YES 肯定解决了这个问题。太感谢了,我想不通!

以上是关于UIButton 突然停止工作的主要内容,如果未能解决你的问题,请参考以下文章

当用户在 UIButton 上滑动时,UIScrollView 停止工作

WCF 突然停止工作

IPN 监听器突然停止工作

CORS 工作正常但突然停止工作?

UIButton 在开发过程中停止响应

Visual Studio Code 扩展突然停止工作