我可以将两个按钮分配给 Xcode 7 中的同一个动作或插座吗?

Can I assign two buttons to a same action or outlet in Xcode 7?

我在界面生成器的 'w Compact h Any' 选项卡中为 iPhone 创建了一个用户界面。然后我决定在 'w Regular h Regular' 中为应用程序的 iPad 版本创建一个不同的界面,但是当将按钮和标签拖到我的 ViewController.h 文件中的操作和出口时,它们会替换其他界面中的按钮和标签。

有什么办法可以同时保存两者吗?

您可以单击并拖动 IBAction 方法的小连接器圆直接 情节提要中的另一个控件,甚至如果它已经连接到一个(实际上我认为你也可以从故事板对象拖动到 IBAction)。

请记住,如果您使用不同的 classes,您可能希望使用 id 并在使用它之前检查 class 名称:

- (IBAction)buttonPressed:(id)sender {
    if ([sender isKindOfClass:[UIButton class]]) {
        //
    }
}

要验证它是否已连接到两者,请单击方法圈:

如果您在 Xcode 7 或 8 中编写 Swift,则创建的方法将使用 Any 类型;您需要将其更改为 UIButton 才能正常工作:

@IBAction func buttonPressed(sender: UIButton) {
    //                                  ^
}

您可以通过为每个按钮指定标签来为两个按钮分配相同的操作,但您不能为两个按钮指定相同的插座。

例如:

假设您有两个按钮,如下所示:

  UIButton *btn1 = [[UIButton alloc]initWithFrame:(YourFrame)];
    btn1.tag=1;
   [btn1 addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
   [self.view addSubview:btn1];

  UIButton *btn2 = [[UIButton alloc]initWithFrame:(YourFrame)]; 
   btn2.tag=2;
  [btn2 addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
  [self.view addSubview:btn2];

然后

- (IBAction)buttonTapped:(UIButton *)sender
{
    if ((sender.tag=1))
    {
      // btn1 clicked, do something for btn1 click action here...
    }
    else if ((sender.tag=2))
    {
      //btn2 clicked, do something for btn2 clik action here...
    }
}

这适用于编程按钮,但如果您使用情节提要来执行此操作,则适用相同的程序。