Cocoa:循环浏览窗口中的所有控件?

时间:2012-01-14 16:48:34

标签: macos cocoa user-interface controls

我正在使用Cocoa编写Mac应用程序。

如何在NSWindow中循环/枚举所有按钮,标签和其他GUI控件?我想获得每个控件的标签

谢谢!

1 个答案:

答案 0 :(得分:3)

我想你想要的东西是:

- (void)addLabelsFromSubviewsOf:(NSView *)view to:(NSMutableArray *)array
{
    // get the label from this view, if it has one;
    // I'm unsure what test you want here, maybe:
    if([view respondsToSelector:@selector(stringValue)])
        [array addObject:[view stringValue]];

    // or possibly:
    //    if([view isKindOfClass:[NSTextField class]]) ?

    // and traverse all subviews
    for(NSView *view in [view subviews])
    {
        [self addLabelsFromSubviewsOf:view to:array];
    }
}

...

NSMutableArray *array = [NSMutableArray array];
[self addLabelsFromSubviewsOf:[window contentView] to:array];

视图可以包含子视图,因此它最终成为树状结构。在这段代码中,我只使用简单的递归来实现它。