使用BOOL作为按钮的属性

时间:2015-07-11 10:09:36

标签: objective-c macos object boolean

我有一个布尔值,我想将其设置为按钮的属性:

int tag = (int)[sender tag];
NSString* keyPath = [NSString stringWithFormat:@"addButton%d.hidden", tag];
[self setValue:YES forKey:keyPath];

我无法直接执行此操作,因为addButton的号码会根据发件人的标记进行更改。

我已经尝试过:

setValue:[NSNumber numberWithBool:YES]

但不起作用。

我哪里错了?

2 个答案:

答案 0 :(得分:0)

可能是setValue:forKeyPath:,值必须是对象

[self setValue:@(YES) forKeyPath:keyPath];

答案 1 :(得分:0)

整个问题基于糟糕的架构。拥有属性addButton1addButton2addButton3等首先很难处理。每当您看到自己在属性末尾添加数字时,请改用数组。

NSArray *addButtons = @[self.addButton1, self.addButton2, self.addButton3];

然后简单地

[addButtons[sender.tag - 1] setHidden:YES];

使用KVC仅适用于特定情况。如果您是初学者,请尽量不要使用它。过度使用它是一个坏习惯。直接访问属性,而不是使用字符串名称。