我知道这是一个非常简单的问题。我到处都在搜索堆栈溢出,并且我总是看到相同的答案。但是它仍然对我不起作用。我是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!");
}

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

最佳答案

问题是您永远不会将按钮添加到视图中。您仅添加图层。处理事件的是按钮视图(而不是图层)。

替换此行:

[previewLayer addSublayer:switchButton.layer];

与类似:
[someView addSubview:switchButton];
someView应该是您想要向其添加按钮的任何视图的适当引用。

10-06 02:54