【问题标题】:Can I assign two buttons to a same action or outlet in Xcode 7?我可以将两个按钮分配给 Xcode 7 中的同一个动作或插座吗?
【发布时间】:2015-07-23 16:45:57
【问题描述】:

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

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

【问题讨论】:

    标签: ios objective-c xcode interface-builder


    【解决方案1】:

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

    请记住,如果您使用不同的类,您可能需要使用 id 并在使用它之前检查类名:

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

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

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

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

    【讨论】:

    • 就像 Xcode 8 的更新一样,如果您通过从情节提要中拖动创建了第一个 IBAction,则您可能忘记更改默认值并且它可能使用 @ 的发件人创建它987654331@ 这将不起作用。只需将 Any 更改为 UIButton 即可再次使用。
    【解决方案2】:

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

    例如:

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

      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...
        }
    }
    

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

    【讨论】:

    • 谢谢!如果我有按钮作为插座,我该怎么做呢?
    • 如果你有按钮作为插座假设你有按钮插座像 IBOutlet UIButton *button1; IBOutlet UIButton *button2;您可以在 viewDidLoad 中将标签设置为 button1.tag=1,button2.tag=2 ,也可以在情节提要中设置。为此,请从情节提要中选择您的按钮,然后从右侧设置其标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多