我看到了一些示例代码,它们将相同的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
是一个子类):
button1.addTarget(self, action: "buttonClicked:", for: .touchUpInside)
button2.addTarget(self, action: "buttonClicked:", for: .touchUpInside)
button3.addTarget(self, action: "buttonClicked:", for: .touchUpInside)
在这种情况下,第一个参数是目标对象self
。该操作是一个选择器(方法签名),基本上有两个选项(稍后会详细介绍)。在控制事件是有点特殊的UIControl
-
.TouchUpInside
通常用于窃听的按钮。
现在,行动。这是以下格式之一的方法(名称由您选择):
func buttonClicked()
func buttonClicked(_ sender: AnyObject?)
要使用第一个,请使用“ buttonClicked”,对于第二个(请在此处使用),请使用“
buttonClicked:”(带冒号)。该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
是实例变量)。
代替使用带有大switch语句的一种方法,请考虑为每个按钮使用单独的方法。根据您的特定用例,这两种方法可能会更好:
func button1Clicked() {
// do something
}
func button2Clicked() {
// do something
}
func button3Clicked() {
// do something
}
在这里,我什至不使用sender
参数,因为我不需要它。
PS:您可以在情节提要或nib文件中进行编程,而无需通过编程添加目标和操作。为了展示您放在IBAction
函数前面的操作,例如:
@IBAction func button1Clicked() {
// do something
}
问题内容: 我来自iOS开发,我想知道是否可以像iOS中那样以编程方式设置?并添加in代码。还是设置a 使用绑定的唯一方法? 谢谢! 问题答案: 感谢@stevesliva为我指出了 。我将其转换为Swift。这就是我得到的。 我在ViewController中创建一个NSCollectionView: 在ViewController中创建的CollectionViewItem只需加载一个视图,即
我在Android中以编程方式设置APN。当我运行代码时,我得到。如果我在清单中提到这个权限,我得到的错误就像这些权限只有SYSTEM APPS。你能帮我解决这个问题吗?参考链接
问题内容: 如何确保从hibernate.cfg.xml加载所有属性,然后以编程方式添加其他属性?我看到了以下代码片段,但它看起来像是全新的配置,而不是现有配置的补充。 问题答案: 您显示的代码段是您所需要的。只需使用您现有的配置,而不是创建一个新的配置即可。 如果不是您实例化配置(例如,spring),则需要扩展创建它的类。
问题内容: 我正在尝试创建一个警报应用程序,但我注意到像Sleep Cycle这样的应用程序会在警报响起之前将您的音量设置为最大,即使您的音量非常低。 我已经尝试过使用AVAudioPlayer,而通过MPVolumeView看到的全部是用户必须这样做。有什么方法可以让我无需用户进行操作? 谢谢您的帮助。 如果可以的话请尽快获取代码 问题答案: 您只需要导入MediaPlayer。您可以执行以下操
我试图在我的应用程序中使用模拟位置进行测试。要接收位置更新,我使用最新的Android开发者留档在这里:https://developer.android.com/training/location/receive-location-updates 本教程使用FusedLocationProviderClient和locationClient。requestLocationUpdates(crea
问题内容: 我尝试以编程方式实现UITableView,而不使用xib或Storyboards。这是我的代码: ViewController.swift MyTableViewController.swift 但是当我运行应用程序时,我得到的只是空表。在日志中,我看到了和的几行,但没有。如何修复此代码以获取包含6行文本的表格? 问题答案: 注意: 正如您提到的,您刚刚开始在中进行编程。我以编程方式