2010-06-04 33 views
1

例如,我創建了一個名爲btn1-btn50的50個連續按鈕的視圖。如果我想要解決這些按鈕並在循環中對它們進行一些更改,那麼我如何使用字符串名稱來解決控件問題?如何在obj-c中動態地控制一個地址?

+1

你是什麼意思的按鈕*命名* btn1-btn50?你的意思是那些是他們的標題屬性?那些是你用來引用它們的變量的名字?這些是你與朋友討論按鈕時使用的暱稱?按鈕通常沒有名字,所以你的術語很混亂。 – Chuck 2010-06-04 01:58:46

+0

[目標C的等價PHP的「變量變量」]的可能重複(http://stackoverflow.com/questions/2283374/objective-c-equivalent-of-phps-variable-variables) – 2010-06-04 02:02:36

+0

查克 - 我的名字到界面生成器中的名稱,顯然有一個叫做name的屬性......它是否可以通過編程方式訪問,這基本上就是這個問題的關鍵。我認爲它可以總是在那裏爲組織在界面生成器,但它似乎應該能夠編程方式。然而,根據我所得到的答案,我猜測假設它​​不是。 – Smallinov 2010-06-04 03:18:57

回答

3

在層次結構中獲取視圖的典型方法是調用[parentView viewWithTag:]來獲取視圖。如果您將按鈕標籤值從1改爲50,則可以使用它來訪問按鈕。

如果由於某種原因需要字符串,您將不得不創建一個具有名稱成員的UIButton自定義子類,爲該成員分配一個名稱,然後迭代通過視圖層次結構搜索自定義類的實例名稱與您的搜索條件相匹配。

1

你不能保證這些按鈕按順序排列在內存中,所以試圖使用指針算法可能已經沒有了。但是,你可以得到一個的NSView的所有子視圖與-subviews,只是做一些與NSButtons:

for (NSView *view in [theView subviews]) { 
    if (![view isKindOfClass:[NSButton class]]) continue; 
    /// you got a button! 
} 
+0

's/return/continue /'? – 2010-06-04 01:38:25

+0

這可能工作,因爲我可以循環遍歷所有人尋找具有正確名稱的人,但沒有辦法傳遞一個字符串來檢索視圖沒有循環所有的人? – Smallinov 2010-06-04 01:42:59

+0

@Georg,是的,謝謝!修復。 – kevingessner 2010-06-04 01:45:35

2

如果你給他們一個tag,您可以使用-viewWithTag:父視圖方便地訪問它們。

0

在你的View Contoller中添加一個NSMutableDictionary * buttonViews屬性。在viewDidLoad方法中,使用名稱字符串作爲鍵和按鈕作爲對象將每個按鈕添加到buttonViews。你必須使用viewWithTag:已經討論過才能獲得視圖。現在您可以使用字符串定位按鈕,並從收集方法和快速枚舉中受益。 Apple的Interface Builder文檔指出,IB中的「名稱」用於幫助在IB中識別對象,這有助於翻譯。