【问题标题】:IBOutletCollections alternatives in OSX (2016 Redux) for custom radio buttonsOSX(2016 Redux)中用于自定义单选按钮的 IBOutletCollections 替代方案
【发布时间】:2023-04-04 10:40:01
【问题描述】:

我正在尝试将自定义按钮实现为单选按钮组。由于我找不到自定义单选按钮外观的方法(每个状态的开/关/悬停),我已将它们实现为自定义图像按钮(NSButton 子类)。那部分工作正常。问题是处理每组按钮的状态以及由组确定的相应变量(每组 1 个)。 IBCollections 看起来非常适合这个问题。但我正在编写一个 Mac 应用程序。

我可以在 OS X* 中的 IBOutletCollections 上找到的几个问题已经有几年的历史了。我什至不能对他们发表评论,因为我缺乏声誉点,因此是新问题。

我确实赞成这些答案,因为它们提供了极大的帮助,因为我阅读的关于 IBCollections 的博文并没有费心将它们指定为 iOS/UIKit,XCode 也没有显示任何错误(太有帮助了!/sarcasm)。

有没有想出另一种方法来实现这一点?对于像这样的一组按钮(或更糟糕的多组),每个单独的插座都是疯狂的。我可以将它们实现为带有 IBOutlets 和 IBActions 的 IB 定义按钮的数组吗?

*很快恢复到 Mac OS(尽管它会受到大小写挑战:)

【问题讨论】:

    标签: macos custom-controls iboutletcollection


    【解决方案1】:

    我不会声称这是一个优雅的解决方案,但我设法通过将自定义按钮与每个按钮组的 NSArray arrayWithObjects: 分组来解决我的问题。

    我添加了两种方法来模拟单选按钮的行为(在本例中为自定义颜色按钮):

    -(void)setButtonSelected:(NSArray*) theButtons toColor:(NSString*)color {
        [self clearAllButtons:theButtons];
        for (ColorButton *button in theButtons) {
            if ([button.color isEqualToString:color]) {
                button.state = NSOnState;
            }
        }
    }
    
    -(void)clearAllButtons:(NSArray*) theButtons {
        for (ColorButton *button in theButtons) {
            button.state = NSOffState;
        }
    }
    

    由于我的具体问题涉及需要唯一选择的多组按钮,因此我为组中的每个对齐选项添加了数组(基本上是列)。

    - (void)clearColorConflicts:(NSArray*)theButtons forRow:(NSString*)row {
        for (ColorButton *button in theButtons) {
            if (![button.row isEqualToString:row]) {
                if (button.state == NSOnState) {
                    button.state = NSOffState;
                }
            }
        }
    }
    

    同样,它可能不是一个优雅的解决方案,但它在没有 IBOutletCollection 的情况下解决了我的问题。

    我确实研究了 NSMatrix,但是当我将自定义按钮分组为矩阵时,我无法使用自定义图像按钮行为(on、off、hover_on、hover_off)。

    列组可以通过两种原始方法处理,但是当行/类别选择被另一行中的选择清除时,我有额外的步骤来更新变量/默认值。事后看来,我本可以在选择后检查每个组的状态。

    我的问题可能是独一无二的,但我发布这个以防它帮助其他人。

    我没有标记为已解决,因为我希望有人有比我更好的解决方案。

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2017-11-05
      • 2012-04-29
      • 2019-01-23
      • 2011-07-18
      • 2021-10-06
      • 1970-01-01
      • 2010-11-13
      • 2020-02-09
      相关资源
      最近更新 更多