如何将情节提要中的多个按钮连接到单个动作?

Posted

技术标签:

【中文标题】如何将情节提要中的多个按钮连接到单个动作?【英文标题】:How to connect multiple buttons in a storyboard to a single action? 【发布时间】:2013-04-17 02:41:00 【问题描述】:

我目前正在使用 Xcode 4.6,我只是想知道如何在不同的 UIViews 中选择多个按钮,但在单个视图控制器下。 CMD 点击似乎不起作用。我需要这个功能,因为在 Xcode 4.6 中,让 IB 上的两个按钮共享相同操作的唯一方法是一次选择它们,然后将操作拖到您的视图控制器。

我的最终目标是使用 Xcode 4.6 中的情节提要在两个不同的 UIView 上获得两个不同的按钮以匹配相同的操作。有没有办法做到这一点?

编辑:我目前正在使用 Xcode 4.6.1 没有任何运气,升级到 4.6.2。

【问题讨论】:

【参考方案1】:

您可以将多个按钮连接到一个操作,而无需一次全部选中。

但是,在创建动作之后,您需要保存包含该动作的源文件,然后 Xcode 才能让您将另一个控件连接到该动作。

我用 Xcode 4.6.2 做到了这一点:

【讨论】:

嗯,我目前正在使用 Xcode 4.6.1,让我看看升级是否能解决这个问题。 你可能还会发现保存后需要等待几秒Xcode才能赶上。 是的,我保存了很多次(我添加到的文件已经存在了很长一段时间的动作)。它在 4.6.1 上从未对我有用。它在 4.6.2 上运行良好。 +1 有时有用的另一件事是文件 > 关闭“ViewController.m”菜单命令(替换当前选定文件的名称;快捷方式是 Control-Command-W)。然后重新打开文件。我发现这经常会导致 Xcode 注意到它忽略的东西。在助手编辑器中,该菜单命令仅在跳转栏设置为“手动”时可用。 但请注意,默认情况下这会将操作连接到控件的“主要操作”事件。在这种情况下,对于 UIButton,它会附加到 Touch up Inside 事件。如果您想为不同的事件附加一个动作(例如,一个 Touch down 事件动作),最好的方法是选择视图本身,选择 Connections 检查器,然后单击所需动作的小 + 按钮,然后拖动到您也想附加它的按钮。【参考方案2】:

Swift 3.0 Xcode 8.0+

将所有按钮连接到下面的方法签名。 确保参数 sender 的类型为 UIButton(或 UIButton 的子类),以便连接情节提要中的其余按钮。

@IBAction func dialconfigTapped(_ sender: UIButton) 

使用 sender.tag 来识别被点击的按钮。

【讨论】:

【参考方案3】:

按照这些步骤进行

1.在视图控制器中创建 IBAction

在.h文件中

-(IBAction)action:(id)sender;

在 .m 文件中

-(IBAction)action:(id)sender



2 。将所有按钮连接到此操作

3 .按照下一张图片给每个按钮一个标签

4 .现在在你的动作函数里面放这些

    -(IBAction)action:(id)sender

        UIButton *button=(UIButton*)sender;

        if(button.tag==1)

            //your stuff!
        
        if(button.tag==2)

            //your stuff!
        
        if(button.tag==3)

            //your stuff!
        

    

奔跑吧。

【讨论】:

【参考方案4】:

您应该能够在 IB 中做到这一点。在 IB 中,只需将它们指向相关类中的相同 IBAction

当动作发生时,如果您想知道从哪个按钮获得了动作,您可以通过读取按钮中的文本或使用 tag 属性来区分 IBAction 方法中的按钮您应该从 IB 设置。

- (IBAction)buttonClicked:(id)sender 
    NSLog(@"Button pressed: %@", [sender currentTitle]);
    NSLog(@"Button pressed: %@", [sender tag]);

【讨论】:

Xcode 4.6 中似乎存在一个错误,但不允许您这样做。对此问题进行了解释,并对已接受的答案进行了评论。 ***.com/questions/5858247/… 但也没有发布解决方案吗? - “刚刚意识到您还可以通过按住 CMD 并选择所有 UIButtons 来多选您在 IB 中创建的所有 UIButtons,然后按住 ctrl 并将其拖动到代码中,它将创建一个所有 UIButtons 连接到它的单个 IBAction。 "这不适合你吗? 不,它没有,UIButton 跨多个视图,尽管它们共享同一个视图控制器。 CMD 点击这些 UIButtons 将不允许我选择多个。【参考方案5】:

您可以使用IBOutletCollection,以下链接将帮助您使用它

http://useyourloaf.com/blog/2011/03/28/interface-builder-outlet-collections.html

【讨论】:

【参考方案6】:

在 Xcode 5 中,为第一个按钮设置操作后,我必须构建应用程序。然后,这允许我将其他按钮操作连接到相同的 IBAction 方法

【讨论】:

【参考方案7】:

在 xcode 4.6.3 中 在分配操作之前您不再需要保存。

【讨论】:

@Chris : Xcode : 5.0.2 : 在分配操作之前无需保存。 我使用 5.0.2,但发现我需要 - 当我不希望 Xcode 如此不一致时,我被搞砸了几次。 =/ @Chris 我仍然在 Xcode 6 中这样做,我认为在 Xcode 7 中也不会有太大的不同。

以上是关于如何将情节提要中的多个按钮连接到单个动作?的主要内容,如果未能解决你的问题,请参考以下文章

使用多个 ViewController、Xcode 将代码连接到情节提要中的 UI

如何将情节提要中的按钮连接到 Xcode 中的代码

使用按钮将视图与情节提要中的 tableview 连接

如何在情节提要中将属性 tableView 连接到 UITableView

将情节提要的 UITableView 连接到 .m UIViewController 作为 IBOutlet

Segues 直接从情节提要 xcode 中的视图控制器警告启动