【问题标题】:Iterate over multiple checkboxes and get titles of selected遍历多个复选框并获取选定的标题
【发布时间】:2017-07-20 06:16:13
【问题描述】:

我有一个应用程序,其窗口包含一个可能包含 100 个复选框的框。

当我按下一个按钮时,我想构建一个选定复选框的标题字符串。

我知道我需要遍历所有复选框并获取标题,但我不知道该怎么做。任何指针将不胜感激。我知道如何使用绑定和标签来做到这一点,但使用 100 个复选框真是太疯狂了!

谢谢!

【问题讨论】:

  • 为什么不使用多选的tableview或collectionView却得到了选中的索引?
  • 选中的复选框是什么意思?如何选择复选框?

标签: objective-c macos cocoa checkbox


【解决方案1】:

我建议您使用堆栈视图或集合视图。如果您想使用简单的复选框,您必须将指针保存在数组中以进行迭代,或者将它们作为容器放在自定义视图中,您可以在其中迭代其子视图。

这个例子会给你指明一个方向:

NSMutableArray *activeButtons = [NSMutableArray new];
for (NSView* subview in [self.container subviews])
    if ([subview isMemberOfClass:[NSButton class]] && [(NSButton*)subview state] == 1)
        [activeButtons addObject:[(NSButton*)subview title]];

NSString* text = [activeButtons componentsJoinedByString:@", "];
NSLog(@"Active: %@",text);

isMemberOfClass 方法将确保只获取按钮而不是文本。如果容器中还有其他按钮,您可以额外检查按钮类型以确保仅获取复选框。有更快的方法,例如枚举,但恕我直言,这是一个更好的起点。

注意:写在手机上...未经测试,所以请原谅可能的错字(尽管仔细检查)

【讨论】:

  • 谢谢,我不知道如何访问框视图...我不知道该放什么:[self.container subviews] 我得到“在对象类型 AppDelegate 上找不到属性容器”我猜这是非常基本的......叹息。
  • 哎哟。这是非常基本的。您应该从一些基本教程开始。您不应将 AppDelegate 用于视图。 1. 了解 viewController 是什么 - 2. 了解如何将 IBOutlets 与 vuewController 连接 3. 整个代码必须在 viewController 中的 IBAction 中。即使这对您来说听起来完全是西班牙语,但它是最基本的事情之一。并且:如果答案是正确的,你应该接受它(钩子),或者如果它让你前进,你应该支持它。祝你好运
  • 感谢您的代码、指导,最重要的是不要刻薄——您清晰的代码、解释和指针非常有帮助,经过一些努力和调整,我已经实现了我的目标。
猜你喜欢
  • 1970-01-01
  • 2013-09-28
  • 2018-08-08
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
相关资源
最近更新 更多