我看到一些示例代码将相同的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;
}
}
};
Run Code Online (Sandbox Code Playgroud)
注意:我不想以编程方式创建按钮.
Tho*_*ler 74
在iOS上,你没有设置一个监听器; 你将目标(一个对象)和一个动作(方法签名,iOS中的"selector")添加到你的UIControl(它UIButton的子类):
button1.addTarget(self, action: "buttonClicked:", for: .touchUpInside)
button2.addTarget(self, action: "buttonClicked:", for: .touchUpInside)
button3.addTarget(self, action: "buttonClicked:", for: .touchUpInside)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,第一个参数是目标对象self.该操作是一个选择器(方法签名),基本上有两个选项(稍后会有更多选项).在控制事件是特定于一点UIControl- .TouchUpInside通常用于窃听的按钮.
现在,行动.这是以下格式之一的方法(名称是您的选择):
func buttonClicked()
func buttonClicked(_ sender: AnyObject?)
Run Code Online (Sandbox Code Playgroud)
要使用第一个使用"buttonClicked",对于第二个(你想在这里)使用"buttonClicked:"(带尾随冒号).这sender将是事件的来源,换句话说,就是你的按钮.
func buttonClicked(_ sender: AnyObject?) {
if sender === button1 {
// do something
} else if sender === button2 {
// do something
} else if sender === button3 {
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
(这假定button1,button2并且button3是实例变量).
使用big switch语句而不是这个方法考虑为每个按钮使用单独的方法.根据您的具体用例,任何一种方法都可能更好:
func button1Clicked() {
// do something
}
func button2Clicked() {
// do something
}
func button3Clicked() {
// do something
}
Run Code Online (Sandbox Code Playgroud)
在这里,我甚至没有使用这个sender论点,因为我不需要它.
PS:您可以在Storyboard或nib文件中以编程方式添加目标和操作,而不是以编程方式添加目标和操作.为了公开你IBAction在函数前面放置的动作,例如:
@IBAction func button1Clicked() {
// do something
}
Run Code Online (Sandbox Code Playgroud)
Gil*_*man 48
斯威夫特4.*
button.addTarget(self, action: #selector(didButtonClick), for: .touchUpInside)
Run Code Online (Sandbox Code Playgroud)
按钮触发此功能:
@objc func didButtonClick(_ sender: UIButton) {
// your code goes here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70265 次 |
| 最近记录: |