虽然我同意标签在许多情况下都可以使用,但是当您有一个包含 100 个按钮的矩阵时,使用整数标签会很痛苦,这些按钮可以在您想要识别的位置进行推送:(1) 推送的内容和 (2) 推送的值. 我发现自己开始发明带有失控的标签号的行/列命名方案。
我希望多个控件共享同一个处理程序,并且我想在 IB 中仔细设计我的 UI,以根据推送的内容将名称/值对传递给键值存储。
作为标签的替代方案,我为 UISegmentedControl 提出了另一种解决方法(它也适用于其他控件)。
(1)新建类和子类UISegmentedControl。将字符串属性 MyCustomKey 添加到您的新类。
@interface CustomSegmentedControl : UISegmentedControl
@property (nonatomic, retain) NSString* myCustomKey;
@end
(2) 回到 IB,将 UISegmentedContol 实例修改为 CustomSegmentedControl 实例。使用 IB“用户定义的运行时属性”来设置使用 IB 的 myCustomKey 的值。KeyValueCoding 将为您处理属性设置:
(3) 将所有按钮连接到一个 IBAction。
(4) 在您的 IBAction 中,您现在可以通过读回您的自定义属性来提取键值对:
- (IBAction)myButtonPressed:(id) sender
{
if ([sender isKindOfClass:[CustomSegmentedControl class]] == false)
return;
// get the key-values from the control
CustomSegmentedControl *control = (CustomSegmentedControl *)sender;
NSString *key = [control valueForKey:@"myCustomKey"];
NSNumber *value = [NSNumber numberWithInteger:[control selectedSegmentIndex]];
NSLog(@"Pressed control %@ with a value of %@", key, value);
}
在这种情况下,我只对分段控件的整数值感兴趣,但您可以从控件中获取任何属性作为值。
希望这可以帮助。