UIButton 选择器方法不起作用

Posted

技术标签:

【中文标题】UIButton 选择器方法不起作用【英文标题】:UIButton Selector method not working 【发布时间】:2016-06-16 07:15:49 【问题描述】:

我以编程方式创建 UIIimageView,而不是创建 UIView,在 uiview 中,我以编程方式添加了两个 uibutton,但按钮选择器方法不起作用。我尝试了很多东西,但什么也没发生。这是我的代码

-(void) pagingFunc
    CGRect screen = [[UIScreen mainScreen] bounds];
    CGFloat width = CGRectGetWidth(screen);
    CGFloat height = CGRectGetHeight(screen);



    //ScrollView Size and Contents
    CGSize mxSize = CGSizeMake( [imgesArry count]*width , height-114);
    [scrlView setContentSize : mxSize];

     self.customView.translatesAutoresizingMaskIntoConstraints =YES;
    self.customView.frame = CGRectMake(0, 0, mxSize.width, mxSize.height);


    int incX = 0 ;

    for( int i = 0; i < [imgesArry count]; i++)
    
        PFObject *imageObject = [imgesArry objectAtIndex:i];
        PFFile *file;
        if (height == 480) 
            file = [imageObject objectForKey:@"image4s"];
        
        else
            file = [imageObject objectForKey:@"image6s"];
        

    NSString * imgFile = [file  url];
     UIImageView*  imagView = [[UIImageView alloc]initWithFrame : CGRectMake(incX,0,width ,height)];
        imgView.userInteractionEnabled = YES;
        [imagView sd_setImageWithURL:[NSURL URLWithString:imgFile] placeholderImage:[UIImage imageNamed:@"UserUpdationImageCell.png"]];
        btnView  = [[UIView alloc] initWithFrame:CGRectMake(incX, imagView.frame.size.height-60, width, 50)];
        btnView.backgroundColor = [UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:0.8];
        UIButton *bckBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [bckBtn addTarget:self
                   action:@selector(aMethod)
         forControlEvents:UIControlEventTouchUpInside];
        [bckBtn setTitle:@"Back" forState:UIControlStateNormal];
        bckBtn.frame = CGRectMake(0 ,0, 160.0, 40.0);


        UIButton *downloadBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [downloadBtn addTarget:self
                   action:@selector(aMethod)
         forControlEvents:UIControlEventTouchUpInside];
        [downloadBtn setTitle:@"Download" forState:UIControlStateNormal];
        downloadBtn.frame = CGRectMake(160 ,0, 160.0, 40.0);
        [btnView addSubview:bckBtn];
        [btnView addSubview:downloadBtn];
        [self.customView addSubview:imagView];
        [self.customView addSubview:btnView];


        incX+= width;
    
    [scrlView setContentOffset:CGPointMake(width*selectedIndex, 0)];



【问题讨论】:

我也面临同样的问题,这是因为,UIButton 不知何故失去了它的目标。使用 UIButton+Block 类别,这对我有帮助。这是链接gist.github.com/joshdholtz/2468899 设置btnView.userInteractionEnabled=YES; 现在尝试链接@Mahesh 我之前尝试过,但“启用用户交互”不起作用@Paulw11 还有self.customView ? - 需要在所有超级视图上启用用户交互 【参考方案1】:

你可以设置:self.customView.userInteractionEnabled=YES;

我写了一个你描述的简单演示,它可以工作:

// imagView -> view1 -> bckBtn
    UIImageView *imagView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 200, 200)];
    imagView.userInteractionEnabled = YES;
    imagView.backgroundColor = [UIColor grayColor];
    [self.view addSubview:imagView];

    UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 100, 100)];
    view1.backgroundColor = [UIColor yellowColor];
    [imagView addSubview:view1];

    UIButton *bckBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    bckBtn.frame = CGRectMake(10, 10, 50, 50);
    bckBtn.backgroundColor = [UIColor redColor];
    [bckBtn addTarget:self
               action:@selector(aMethod)
     forControlEvents:UIControlEventTouchUpInside];
    [bckBtn setTitle:@"Back" forState:UIControlStateNormal];
    [view1 addSubview:bckBtn];

-(void)aMethod
    NSLog(@"button click");

希望对你有帮助。

【讨论】:

【参考方案2】:

第一件事,确保你没有任何覆盖按钮。 您也可以尝试使用 GestureRecognizers。

这是一个Swift sn-p,我很确定它可以翻译成obj-c

let xButton = UIButton(frame: CGRect(x: 0, y: 0, width: 160, height: 40))
xButton.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(aMethod)))

【讨论】:

以上是关于UIButton 选择器方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 选择的图像不起作用

自定义 UIView 类中的 UIButton 不起作用

引导日期选择器不起作用

UIPickerview 完成按钮不起作用,即使它没有调用选择器方法

离子图像选择器和选择器在 IOS 中不起作用

如果 UIWINdow 的子视图,UIButton 单击不起作用