2012-03-19 10 views
0

我想聲明一個IBOutletCollection。 我想要做的是管理多個按鈕,我不必每個按鈕都聲明一個按鈕。語法錯誤:IBOutletCollection

#import <Foundation/Foundation.h> 

@interface WindowManager : NSObject 
{ 
    @private 
    IBOutlet NSTextField* textField; 
    IBOutletCollection (NSButton) NSArray* buttonsArray; 
} 

@property (nonatomic , retain) IBOutletCollection (NSButton) NSArray *buttonsArray; 

- (void) awakeFromNib; 

@end 

我得到這些錯誤:

type name requires a specifier or qualifier 

expected ; at end of declaration 

而且我不明白其中的道理。 我想要這樣的情況:加載.xib文件時,我將NSArray中的所有按鈕都放在一起,這樣我就可以管理它們了。每次按下按鈕時,我都想知道哪個按鈕被按下了。 這可能嗎?問題是,我只找到iPhone指南,我在iPhone指南中找到了一個與此代碼相似的例子,並說這件事很有效。

+0

IBOutletCollection僅適用於iOS。 – 2012-03-20 05:29:41

回答

1

我會建議使用一個IBAction爲代替:

-(IBAction)button_Clicked:(id)sender; 

的原因是,被按下的按鈕是在新聞發佈會上的「發送方」。這樣你總能知道按下了哪個按鈕。如果你想讓它更可識別的,您可以設置按鈕「標籤」屬性,讓你實現文件應該是這樣的:

-(IBAction)button_Clicked:(id)sender { 
    switch([sender tag]) { 
     case 1: 
      // do stuff 
      break; 
     //etc..... 
     default: 
      break; 
    } 
} 

您可以指定任意數量的控制用行動。我希望這有幫助。

+0

存在一個問題:如果我嘗試這種方式,代碼不起作用。 因此,爲了調試,我試圖用NSLog打印發件人標籤,它是空的。爲什麼? – 2012-03-19 19:42:46

+0

在你的接口文件(.h)中你有' - (IBAction)button_Clicked:(id)sender;'聲明正確嗎?然後你應該在實現文件(.m)中聲明實際的方法。一旦你這樣做了,你需要將所有按鈕連接到.xib文件中的方法。 'tag'屬性是一個'NSInteger',不應該爲空......除非發送者不是'NSButton'類型,並且沒有'tag'屬性,然後返回一個空id對象。 – 2012-03-20 17:26:03