2012-04-06 54 views
0

我可能缺少这里的基础知识......有没有办法在Xcode 4.2中使用Interface Builder一次将多个对象链接到一个方法?如何在Xcode 4.2中一次链接多个对象?

我在UIView中设置了大量的UIButtons。他们都只是调用一种方法(比如说- (IBAction)buttonPushed:(UIButton *)aButton),根据发件人的不同,这些方法应该有所不同。我无法找出一种方法将它们全部与我的方法联系起来。任何意见将不胜感激...

N.B.我在Snow Leopard上使用Xcode 4.2,没有故事板。

+1

我想不出一种方式在IB ...我不认为“吨UIButtons”被认为是很多。 :)我想你可以在代码中使用viewDidLoad:检查子视图,查找按钮并设置其目标/操作行为。 – 2012-04-06 22:55:40

+0

呃!你的意思是使用addTarget:action:forControlEvents:在for循环中?好主意!!! – Beppe 2012-04-06 22:59:28

+1

只需将蓝线拖到每个按钮上,即可将IBActions分配给多个按钮。 – CodaFi 2012-04-06 23:14:55

回答

0

在Xcode 4.2中,使用IB似乎不可能一次链接多个对象。

我最终在我的代码中使用了for循环,正如Phillip Mills首先提出的那样(他的评论+1)。

这里我的代码:

for (UIButton *aButton in [self.view subviews]) { 
    [aButton addTarget:self 
       action:@selector(buttonPushed:) 
     forControlEvents:UIControlEventTouchUpInside]; 
} 

感谢大家对你的帮助!

0

这应该只是工作。也就是说,你

  1. 让你的IBAction为定义
  2. 您附上“润色内部”(或其他所需的动作)的方法为每个按钮
  3. 您可以设置每个按钮上的标签值
  4. 在你IBAction为你从发送方的标签和采取相应的行动

    - (IBAction)buttonPressed:(id)sender; 
    { 
        NSInteger tag = [sender tag]; 
        // switch statement or some other check against tag value 
    } 
    
+0

这实际上是我在做什么,但我的目标是加快点2,并避免每个按钮的链接...(无论如何,我感谢你的时间和精力) – Beppe 2012-04-06 23:19:08

+0

啊,误解了你的问题。我不相信IB允许以这种方式进行多重选择。你当然可以通过代码来实现这一点,但这也不是你的问题。 Goodluck – 2012-04-06 23:36:41

+0

@RyanCrews没有提到任何错误。我不知道谁低估了他,但我会放弃他。 Beppe没有提到他已经使用过标签。所以这个答案也是正确的。 – 2012-04-07 13:58:53

0

一个FO r循环可能是一个好主意。保持你的按钮的一个NSArray,做这样的事情:

for (int i = 0; i < [myArray count]; i++) { 
    [(UIButton*)[myArray objectAtIndex:i] addTarget:self action:@selector(buttonPushed:) forControlEvents:UIControlEventTouchUpInside]; 
    [(UIButton*)[myArray objectAtIndex:i]setTag:i]; 
} 

(从我的iPhone来了,这是我能做的最好的这是一个有点粗糙,可能无法编译,但你得到的要点。)。