IBAction on Button Press [关闭]

Posted

技术标签:

【中文标题】IBAction on Button Press [关闭]【英文标题】:IBAction on Button Press [closed] 【发布时间】:2011-08-31 14:43:04 【问题描述】:

讨论。哪个更受欢迎:

一个带有发送者的 IBAction 和一堆 if 语句 例如:if (sender == self.whichbuttonpressed)

带有 sender 和 switch 语句的单个 IBAction 例如:switch (send.tag) // 简写以便于阅读

每个按钮都有一个 IBAction。

为了讨论,假设我们在 XIB 文件中有 6 个或更少的按钮。

谢谢

请相信你的祖母正在阅读你的回复,所以请不要讽刺,要真实。

【问题讨论】:

作为一个诙谐自负的聪明人,我在此告诉你:“Stack Overflow 是为专业和***的程序员准备的”。你的祖母是专业程序员吗? 谁喜欢?不同的结构在不同的情况下有意义,请使用最适合您的用例的结构。 我很高兴您认同了自己。谢谢。 【参考方案1】:

您的实现取决于您的应用,但请考虑这一点..

假设您正在实现一个带有 10 个按钮(0 到 9)的数字键盘。按下每个按钮时的唯一区别是数字代表。因此,如果您将每个按钮的标签设置为该按钮应该表示的数值,则使用单个 IBAction 方法处理 10 个按钮变得微不足道:

-(IBAction)buttonPress:(id)sender UIButton *b = (UIButton *)sender; int 值 = b.tag; // 做一些有价值的事情...

我已经将这种方法用于各种情况,其中单个视图包含许多按钮,这些按钮基本上都做同样的事情,但可以通过为每个按钮分配一个唯一的标签在幕后加以区分。

如果您有一个包含许多按钮但彼此无关的视图,那么每个按钮都应该有自己的 IBAction 方法。在这种情况下,这样做可以使每个按钮的操作的独特实现更具可读性和可维护性。

【讨论】:

【参考方案2】:

我更喜欢使用标签,所以

带有 sender 和 switch 语句的单个 IBAction 例如:switch (send.tag) // 简写以便于阅读

如果不同按钮的操作明显不同,则最后一种方法是合理的

【讨论】:

【参考方案3】:

每个按钮绝对是一个 IBAction。干净的。简单的。使您能够添加或删除操作或按钮,而无需进行编辑,并且可能会在其他操作的代码中引入错误。

【讨论】:

我同意这一点。它更加模块化。 我倾向于同意你的观点,但这是一个非常广泛的问题,很大程度上取决于精确的 UI 和应用程序。我认为它无法以目前的形式回答,也不会带来太多... @Kheldar - 是的。鉴于 *** 说他正在寻找讨论,这对 *** 来说不是很好的形式,但是...... 已经好几年了,但我觉得有必要补充一点,这并不总是正确的。 MarkGranoff 提到的案例场景是 2011 年和 2012 年斯坦福大学 CS193 课程的一部分,作为该课程作业中处理许多计算器数字的正确方法。【参考方案4】:

我实际上是您列出的第二个和第三个。标签绝对比一堆 if 语句更容易使用。如果我在一个视图上有一堆完全不相关的按钮,我通常会使用单独的 IBAction。如果它们彼此相关,那么我使用 1 IBAction,这样我就不必重复自己了。

例子:

    登录和注册按钮:不同的 IBAction。一个需要推送 VC,另一个需要调用 web 服务进行身份验证。 面包屑。在我现在正在开发的应用程序中,我们有一个面包屑栏,用户必须按顺序完成这些步骤。我使用 1 IBAction 来处理这些问题,因为 1. 它们的状态以一致的方式变化,并且 2. 它们基本上都执行相同的操作(在表单中的相应视图中交换)。

【讨论】:

以上是关于IBAction on Button Press [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

MainViewController 有没有办法知道何时调用了 press IBAction 函数? [关闭]

J Press the Button

为啥 Gtk 的 button_press_event 不会收到单击左键?

背景按钮颜色不会改变 on_press

Kivy 没有正确获取 button.text 值

Kivy:使用 on_press 事件在屏幕管理器中更改屏幕