uibutton 添加目标选择器方法在调用类而不是在被调用类中调用

Posted

技术标签:

【中文标题】uibutton 添加目标选择器方法在调用类而不是在被调用类中调用【英文标题】:uibutton add target selector method is called in calling class rather than in called class 【发布时间】:2015-11-19 06:58:29 【问题描述】:

viewcontroller1.m:

[view2 buttonClickCheck:cell];

选择器方法1:

-(void)mybuttonClick:(id)sender
    NSLog(@"mybuttonClick");

view2.m

- (UITableViewCell*) buttonClickCheck: (UITableViewCell*) cell
        NSLog(@"button click check");

        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(cell.frame.origin.x,
                                                                cell.frame.origin.y,
                                                                self.parentViewController.view.frame.size.width,
                                                                frameSize)];
        view.backgroundColor = [UIColor redColor];


        UIButton *mybutton = [[UIButton alloc] initWithFrame:CGRectMake(view.frame.origin.x,view.frame.origin.y, frameSize, frameSize)];
        mybutton.backgroundColor = [UIColor blueColor];
        [mybutton addTarget:self action:@selector(mybuttonClick:) forControlEvents:UIControlEventTouchUpInside];

        [view addSubview:mybutton];
        [cell addSubview:view];

        return cell;

    

    -(void)mybuttonClick:(id)sender
        NSLog(@"mybuttonClick");
    

问题出在点击按钮时,viewcontroller1 的 mybuttonClick 方法被调用而不是 viewcontroller2,我在 viewcontroller 2 中检查 self 对象,它指的是 viewcontroller2 本身。

如果我在 viewcontroller1 中评论 mybuttonclick,单击按钮时不会打印任何内容。

注意:viewcontroller2只是一个类,继承nsobject,不连接任何story board,但是viewcontroller1是

【问题讨论】:

你是否在故事板/界面构建器中正确连接了它? @dan viewcontroller2 只是一个继承nsobject的类 所以您将按钮连接到 viewController1 的 myButtonClick? @dan 你看,myButtonClick 是一个选择器方法,我已经动态指定了目标。故事板中没有静态按钮,我是动态创建的 好的,在黑暗中再次拍摄:您是否在按钮上添加了目标? button addTarget:self action:@selector(aMethod:) forControlEvents:UIControlEventTouchUpInside]; 等等? 【参考方案1】:

如果ViewController2NSObject 类的类型,请检查您是否有类似以下的实现

ViewController1.m 文件中

ViewController2 *view2 = [[ViewController2 alloc] init];
[view2 buttonClickCheck:cell];

并检查ViewController2.h,你必须有声明方法,

- (UITableViewCell*) buttonClickCheck: (UITableViewCell*) cell;

那么你的方法肯定会调用。

最好根据类的类型给出类的名称。比如你的类是NSObject 的类型,那么它的名字应该是View2 而不是ViewController2 这样你就不会感到困惑了。 (这是为了您的方便)

【讨论】:

【参考方案2】:

我认为这是因为您在这里将单元格从 viewcontroller1.m 传递到 view2.m:[view2 buttonClickCheck:cell];,而不是在 (UITableViewCell*) buttonClickCheck: (UITableViewCell*) cell 中创建 UIView *view,将其作为子视图添加到您的单元格中,然后将您的按钮添加到您的 *查看

【讨论】:

这正是我正在做的,你建议我做什么,mybuttonclick 被 viewcontroller2 调用 如果您可以像这样访问 view2,则 viewcontroller1.view2 尝试使用而不是 [mybutton addTarget:self action:@selector(mybuttonClick:) forControlEvents:UIControlEventTouchUpInside]; [mybutton addTarget:self.view2 action:@selector(mybuttonClick:) forControlEvents:UIControlEventTouchUpInside];

以上是关于uibutton 添加目标选择器方法在调用类而不是在被调用类中调用的主要内容,如果未能解决你的问题,请参考以下文章

未调用 UIButton 选择器

UIButton 选择器方法不起作用

UIButton 动画忽略 Swift 中的目标选择器

UIButton 调用选择器使应用程序崩溃

在按钮目标 Swift 的选择器方法中更改两个对象

Objective C UIButton with divider并在选中时更改textcolor