以编程方式将选择器添加到UIButton

时间:2016-03-14 22:13:18

标签: ios objective-c uibutton

我知道这是一个非常简单的问题。我到处搜索堆栈溢出,我总能看到相同的答案。但它仍然不适合我。我是Objective-C的新手,请耐心等待。

我正在尝试以编程方式向我的UIButton添加动作。这是在AVCaptureSession中。这是我的代码:

// Create button and add to previewLayer:

UIButton *switchButton = [[UIButton alloc] initWithFrame:CGRectMake((self.view.frame.size.width / 2) - 50, (self.view.frame.size.height - 150), 100, 100)];

[switchButton addTarget:self
                 action:@selector(switchCameras)
 forControlEvents:UIControlEventTouchUpInside];
switchButton.layer.borderColor = [UIColor greenColor].CGColor;
switchButton.layer.borderWidth = 0.5;
switchButton.clipsToBounds = YES;
[previewLayer addSublayer:switchButton.layer];


// Method switchCameras:

- (void)switchCameras {
printf("This is a neat command!");
}

当我点击按钮时,没有任何反应,没有任何内容打印到控制台。我在这做错了什么?

2 个答案:

答案 0 :(得分:4)

问题是您从不将按钮添加到视图中。您只需添加图层。它是处理事件的按钮视图(不是图层)。

替换此行:

[previewLayer addSublayer:switchButton.layer];

有类似的东西:

[someView addSubview:switchButton];

someView应该是您希望添加按钮的任何视图的适当参考。

答案 1 :(得分:2)

我不会给你完整的答案 - 只需要你自己找到答案所需的信息。

UIButtonUIControl的子类。在UIIControl中定义了向按钮添加目标/操作的方法。请查看UIControl上的Xcode文档,并专门查找名称以addTarget开头的方法。

如果您无法弄明白,请回复一下您遇到问题的后续问题。

编辑:

@JoshCaswell刚刚指出您的问题已经使用addTarget:action:。我应该更仔细地查看你的代码。

看起来问题是你要添加按钮的图层,而不是按钮。不要这样做。将按钮添加为相应容器视图的子视图。图层不会处理目标/操作。