2009-06-23 94 views
2

我有view0到view25。我不是特別想要一個25個開關,所以有辦法做這樣的事情嗎?通過類似命名的控件循環

- (void)modifyViewNumber:(int)number 
{ 
    [view*number* dosomething]; 
} 

回答

1

爲什麼不把視圖放入數組中並使用數組索引獲取對它們的引用?

- (void)modifyViewNumber:(int)number 
{ 
    UIView* view = [views objectAtIndex:number]; 
    [view dosomething]; 
} 
7

在啓動時將視圖放入數組中。

0

創建一個視圖數組。按順序添加每一個,然後通過數組索引引用它。

如果數字不是連續的,則使用散列表。

反射可能是一個選項,但可能會更慢(我不是一個Objective C大師,甚至不知道這是否可行)。

0

我假設您使用Interface Builder來設置這些視圖?

有人可能需要糾正我,但我相信你可以在你的類中創建一個NSArray Interface Builder插座,然後將所有的視圖分配給它。例如,您可以聲明「IBOutlet NSArray *視圖;」在頭文件中,然後使用接口生成器綁定將所有25個視圖綁定到該屬性。它們會自動添加到數組中,然後您可以在代碼中完整地迭代它。

+0

如果你是正確的,你當然應該得到一個+1! – teabot 2009-06-23 16:29:01

+2

對不起 - 看起來我錯了。 Interface Builder文檔說「一次只能有一個對象連接到給定的插座」。我發誓我已經做到了 - 所以我會繼續尋找。對不起,雖然錯誤的答案。 – 2009-06-23 16:37:03

3

你可以把每個視圖中的代碼,並使用一個for循環使用下面的方法:

- (id)viewWithTag:(NSInteger)aTag 
1

很多人都說使用數組 - 我做這一切的時候,它是真正的唯一途徑在使用界面生成器時去,但我想添加一點。

有時將值存入數組可能會非常棘手。通常有一種方法可以獲得屏幕上所有控件的數組。通常我會抓住它並遍歷它,尋找具有特定命名模式的控件類型,並將它們收集到我自己的數組中。

通過這種方式,您通常可以添加一個新的控件,而不用更改任何代碼(始終是我最喜歡的目標之一)。

3

沒有人建議NSMatrix沒有?這聽起來像是它的目的。

需要注意的是視圖必須全部是控件,例如文本字段或按鈕。基本上,看看它的類引用,看看它是否從某種程度上繼承NSControl。如果它通過了測試,那麼NSMatrix是一個選項。 (這裏是the list of all AppKit classes,爲了方便起見。)

要在IB中控制一個矩陣,以通常的方式創建一個控件,然後拖動它的調整大小手柄。它起初不會出現任何事情,但會一直拖下去。而不是調整大小,你的控制權將會激增;它現在是一個單元矩陣,而不是單個控件。

0

假設Interface Builder(否則直接回答以前)。這是我可以管理的最好的:

In。H:

{ 
    UILabel   *banner[NUM_BANNERS]; 
} 
@property (nonatomic, retain) IBOutlet UILabel *banner0; 
@property (nonatomic, retain) IBOutlet UILabel *banner1; 
@property (nonatomic, retain) IBOutlet UILabel *banner2; 
etc. 

在.M:

- (void)viewDidLoad 
{ 
    banner[0] = banner0; 
    banner[1] = banner1; 
    banner[2] = banner2; 
    etc. 

然後可以通過數組索引訪問。記得發佈。