uibutton add target selector方法在调用类而不是在被调用的类中调用

时间:2015-11-19 06:58:29

标签: ios objective-c view uibutton subview

viewcontroller1.m:

[view2 buttonClickCheck:cell];

selectormethod1:

-(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它引用了viewcontroller2本身。

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

注意:viewcontroller2只是一个类,继承了nsobject,它没有连接到任何故事板,但是viewcontroller1是

2 个答案:

答案 0 :(得分:0)

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

<{1>}文件中的

ViewController1.m

并在ViewController2 *view2 = [[ViewController2 alloc] init]; [view2 buttonClickCheck:cell]; 中检查,您必须有声明方法,

ViewController2.h

然后你的方法肯定会打电话。

最好根据类型给出类的名称。就像您的课程类型为- (UITableViewCell*) buttonClickCheck: (UITableViewCell*) cell; 那么它的名称应该是NSObject而不是View2,这样您就不会感到困惑。 (这是为了您的方便)

答案 1 :(得分:0)

我认为这是因为您将viewcontroller1.m中的单元格传递给view2.m:(UITableViewCell*) buttonClickCheck: (UITableViewCell*) cell,而不是UIView *view创建{{1}},将其作为子视图添加到您的单元格中,将您的按钮添加到*视图