2010-06-04 60 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中识别对象,这有助于翻译。