我有view0到view25。我不是特別想要一個25個開關,所以有辦法做這樣的事情嗎?通過類似命名的控件循環
- (void)modifyViewNumber:(int)number
{
[view*number* dosomething];
}
我有view0到view25。我不是特別想要一個25個開關,所以有辦法做這樣的事情嗎?通過類似命名的控件循環
- (void)modifyViewNumber:(int)number
{
[view*number* dosomething];
}
爲什麼不把視圖放入數組中並使用數組索引獲取對它們的引用?
- (void)modifyViewNumber:(int)number
{
UIView* view = [views objectAtIndex:number];
[view dosomething];
}
在啓動時將視圖放入數組中。
創建一個視圖數組。按順序添加每一個,然後通過數組索引引用它。
如果數字不是連續的,則使用散列表。
反射可能是一個選項,但可能會更慢(我不是一個Objective C大師,甚至不知道這是否可行)。
我假設您使用Interface Builder來設置這些視圖?
有人可能需要糾正我,但我相信你可以在你的類中創建一個NSArray Interface Builder插座,然後將所有的視圖分配給它。例如,您可以聲明「IBOutlet NSArray *視圖;」在頭文件中,然後使用接口生成器綁定將所有25個視圖綁定到該屬性。它們會自動添加到數組中,然後您可以在代碼中完整地迭代它。
使用集合或Reflection。
你可以把每個視圖中的代碼,並使用一個for循環使用下面的方法:
- (id)viewWithTag:(NSInteger)aTag
很多人都說使用數組 - 我做這一切的時候,它是真正的唯一途徑在使用界面生成器時去,但我想添加一點。
有時將值存入數組可能會非常棘手。通常有一種方法可以獲得屏幕上所有控件的數組。通常我會抓住它並遍歷它,尋找具有特定命名模式的控件類型,並將它們收集到我自己的數組中。
通過這種方式,您通常可以添加一個新的控件,而不用更改任何代碼(始終是我最喜歡的目標之一)。
沒有人建議NSMatrix沒有?這聽起來像是它的目的。
需要注意的是視圖必須全部是控件,例如文本字段或按鈕。基本上,看看它的類引用,看看它是否從某種程度上繼承NSControl。如果它通過了測試,那麼NSMatrix是一個選項。 (這裏是the list of all AppKit classes,爲了方便起見。)
要在IB中控制一個矩陣,以通常的方式創建一個控件,然後拖動它的調整大小手柄。它起初不會出現任何事情,但會一直拖下去。而不是調整大小,你的控制權將會激增;它現在是一個單元矩陣,而不是單個控件。
假設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.
然後可以通過數組索引訪問。記得發佈。
如果你是正確的,你當然應該得到一個+1! – teabot 2009-06-23 16:29:01
對不起 - 看起來我錯了。 Interface Builder文檔說「一次只能有一個對象連接到給定的插座」。我發誓我已經做到了 - 所以我會繼續尋找。對不起,雖然錯誤的答案。 – 2009-06-23 16:37:03