我的UIButton没有调用目标方法

时间:2017-08-20 08:30:54

标签: swift uibutton selector

老实说,我不知道#selector有什么问题:

func iterate() {
    scrollView.subviews[0].subviews[0].addSubview(arrowButton)
    arrowButton.addTarget(self, action: #selector(self.pressButton), for: .touchUpInside)
    self.view.bringSubview(toFront: arrowButton)
}

func pressButton() {
    print("pouet pouet pouet")
}

override func viewDidLoad() {
    super.viewDidLoad()
    iterate()
}

(不要介意布局的事情,为了清晰起见,我已经删除了所有限制条件)

当我按下按钮时,没有打印任何内容。

我对#selector感到疯狂,这样一个重要的开发仍然是如何使用这个ObjC废话?

编辑:我的UIBUtton位于所有图层之上,或者至少是XCode调试工具所说的(按钮位于右下角)= enter image description here

3 个答案:

答案 0 :(得分:0)

我认为这一行的错误     (scrollView.subviews [0] .subviews [0] .addSubview(arrowButton之上))

可能是您在View jsut check

下添加的按钮
func iterate() {
    scrollView.subviews[0].subviews[0].addSubview(arrowButton)
    arrowButton.addTarget(self, action: #selector(self.pressButton), for: .touchUpInside)
}

func pressButton() {
    print("pouet pouet pouet")
}

override func viewDidLoad() {
    super.viewDidLoad()
    iterate()
}

答案 1 :(得分:0)

可能是因为语法有些问题。试试这个......

arrowButton.addTarget(self, action: #selector(pressButton(_:)), for: .touchUpInside)

对于触摸动作......

func pressButton(_ sender : UIButton){

 print("Button Tapped")
 }

答案 2 :(得分:0)

1。只是为了调试问题不是因为view hierarchy,请尝试替换代码的这一行:

scrollView.subviews[0].subviews[0].addSubview(arrowButton)

self.view.addSubview(arrowButton)

2。检查arrowButton的以下属性未在代码中的某处设置为false

isEnabled, isUserInteractionEnabled

这两个属性必须为truearrowButton才能接收touch events

3。检查arrowButton顶部是否未添加任何其他视图。

4. 您提供的selector没有问题。它工作得非常好。我使用下面的代码,它适用于我:

func iterate()
{
    let arrowButton = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
    arrowButton.backgroundColor = .red
    self.view.addSubview(arrowButton)
    arrowButton.addTarget(self, action: #selector(self.pressButton), for: .touchUpInside)
    self.view.bringSubview(toFront: arrowButton)
}

我认为view hierarchy在某种程度上导致了这个问题。