我看到了一些示例代码,它们将相同的OnClick事件分配给Android中的所有按钮(即使它们执行的动作完全不同)。如何用Swift做
Android示例:
@Override public void onCreate(Bundle savedInstanceState) { button1.setOnClickListener(onClickListener); button2.setOnClickListener(onClickListener); button3.setOnClickListener(onClickListener); } private OnClickListener onClickListener = new OnClickListener() { @Override public void onClick(View v) { switch(v.getId()){ case R.id.button1: //DO something break; case R.id.button2: //DO something break; case R.id.button3: //DO something break; } } };
注意:我不想以编程方式创建按钮。
在iOS上,您没有设置监听器;你添加一个目标(物体)和行动(方法签名,在iOS的说法“选择”)将UIControl(这UIButton是一个子类):
UIControl
UIButton
button1.addTarget(self, action: "buttonClicked:", for: .touchUpInside) button2.addTarget(self, action: "buttonClicked:", for: .touchUpInside) button3.addTarget(self, action: "buttonClicked:", for: .touchUpInside)
在这种情况下,第一个参数是目标对象self。该操作是一个选择器(方法签名),基本上有两个选项(稍后会详细介绍)。在控制事件是有点特殊的UIControl- .TouchUpInside通常用于窃听的按钮。
self
.TouchUpInside
现在,行动。这是以下格式之一的方法(名称由您选择):
func buttonClicked() func buttonClicked(_ sender: AnyObject?)
要使用第一个,请使用“ buttonClicked”,对于第二个(请在此处使用),请使用“ buttonClicked:”(带冒号)。该sender会是事件的来源,换句话说,您的按钮。
sender
func buttonClicked(_ sender: AnyObject?) { if sender === button1 { // do something } else if sender === button2 { // do something } else if sender === button3 { // do something } }
(假设button1,button2并且button3是实例变量)。
button1
button2
button3
代替使用带有大switch语句的一种方法,请考虑为每个按钮使用单独的方法。根据您的特定用例,这两种方法可能会更好:
func button1Clicked() { // do something } func button2Clicked() { // do something } func button3Clicked() { // do something }
在这里,我什至不使用sender参数,因为我不需要它。
PS:您可以在情节提要或nib文件中进行编程,而无需通过编程添加目标和操作。为了展示您放在IBAction函数前面的操作,例如:
IBAction
@IBAction func button1Clicked() { // do something }