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】:
如果ViewController2
是NSObject
类的类型,请检查您是否有类似以下的实现
在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 添加目标选择器方法在调用类而不是在被调用类中调用的主要内容,如果未能解决你的问题,请参考以下文章