我正在尝试将自定义按钮实现为单选按钮组。由于我发现无法自定义单选按钮外观(每个状态的开/关/悬停),我已将它们实现为自定义图像按钮(NSButton子类)。那部分工作正常。问题是处理每组按钮的状态以及由组确定的相应变量(每组1个)。 IBCollections看起来非常适合这个问题。但我正在写一个Mac应用程序。
我在OS X *中的IBOutletCollections上可以找到的几个问题已经有几年了。我甚至不能评论他们要求,因为我缺乏声望点,因此新的问题。
我做了大量的答案,因为他们帮助我非常有帮助,因为我读过的IBCollections上的博客文章并没有将它们仅仅指定为iOS / UIKit,也没有显示任何错误(SO HELPFUL!/ sarcasm)。
无论如何想出另一种方法来实现这个目标吗?对于像这样的一组按钮(或更糟的多个组),每个单独的出口都是疯狂的。我可以使用IBOutlets和IBActions将它们实现为IB定义按钮的数组吗?
*很快将恢复到Mac OS(尽管它将大写挑战:)
答案 0 :(得分: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)。
列组可以由两个原始方法处理,但是当通过另一行中的选择清除行/类别选择时,我还有其他步骤用于变量/默认值更新。事后我可以在选择之后检查每个组的状态。
我的问题可能是独一无二的,但是我发布这个以防万一。
我没有标记为已解决,因为我希望有人有比我更好的解决方案。