如何区分 cocoa 应用程序中的标签和文本字段?

How to distinguish between a label and a textfield in cocoa application?

我想在我的视图中收集所有文本字段:

for ( NSView* view in [self.view subviews])
{
    if ([view isKindOfClass:[NSTextField class]]){
            [self.allTxtFields addObject:view];
    }
}

问题是,Labels 也碰巧是 NSTextField

如何区分文本字段和标签?

改为使用 isMemberOfClass

for ( NSView* view in [self.view subviews])
{
    if ([view isMemberOfClass:[NSTextField class]]){
       [self.allTxtFields addObject:view];
    }
}

是的,界面生成器中的"labels"只是NSTextField一些特殊的默认配置,例如:

  • editable = NO
  • selectable = NO
  • bordered = NO
  • drawsBackground = NO
  • 水平拥抱优先级为251而不是250

您可以选择任何上述属性来区分标签与传统的 NSTextFields,只要它是 unqiue 在您的情况下。

最终我按照标签号进行了检查:我给了所有 TextFields 编号在 100 到 200 之间,然后检查 -

if ([view isMemberOfClass:[NSTextField class]] && [view tag] >=100 && [view tag] <200){
        if ([view isAccessibilityEnabled]){
            NSTextField* tfView = (NSTextField*)view;
            [self.allTxtFields addObject:tfView];
        }
    }

不是最优雅的,但它可以在不担心属性更改的情况下工作...