如果这是一个简单的问题我很抱歉,但我一直无法找到足够的解决方案而且我让自己有点疯狂:P
我在各种视图上都有一个带有多个按钮(40-50)的应用程序,并且应该根据按下哪个按钮构建一个包含多个条目的字典。
(例如,如果按下按钮27,我将在viewController中构建一个Dict: 名称 - >约翰·史密斯 地址 - > 1无限循环 年龄 - > 99 )
显然,编写特定于每个按钮的操作是错误的。
我想要做的是继承UIButton(继续上面的例子),将Name,Address和Age作为实例变量添加到我的自定义Button,并在按钮实例化时设置每个实例变量一个初始化: 然后,当按下该按钮时,我可以有一个由所有按钮调用的SINGLE buildDict:(id)发送者动作,只需用sender.Name等填充字典......
我的问题是:我可以在Interface Builder中的属性检查器中添加字段来设置这些值吗?如果这不可能,我在哪里可以找到按钮实例,以便我可以以编程方式设置这些值?
答案 0 :(得分:6)
您不希望将属于模型的数据放入视图中。这听起来也非常复杂 在界面构建器中插入数据?如果我不需要为我的视图编辑标签并且您想要编辑其中的数据,我会感到很幸运吗?
说真的,做对了。创建一个NSArray。 40个按钮的40个对象。使用plist编辑器创建地址列表并将plist文件加载到代码中。这是执行此操作的最快速,最干净的方法。
为每个按钮添加标签。 (如果你必须添加40个按钮,我会在代码中完成它)并将它们连接到IBAction。我建议你给第一个项目标签1000.没有标签的按钮就像一个标签为0的按钮,你不想要这个。如果你从按钮到数组索引,你不想减去1。
- (IBAction)buttonPressed:(UIButton *)sender {
// remember? tag 1000 equals index 0.
NSUInteger index = sender.tag - 1000;
NSDictionary *object = [self.data objectAtIndex:index];
// do whatever you want
}
无需任何子类化。无需违反模型 - 视图 - 控制器概念。
答案 1 :(得分:1)
你可能更擅长使用数组和标签,但如果你真的想在这里进行子类化,你可以这样做:
Interface Builder不允许您添加其他属性。
您需要使用自定义子类(用实际代码编写)来执行此操作。
在Xcode上选择:
文件>新文件 - > Objective C Class(UIView
的子类)。
使用像MyCustomButton这样的名称。
然后你需要将:UIView
替换为:UIButton
到@interface MyButton : UIButton {
NSString* name;
NSString* address;
NSNumber* age;
}
@property(nonatomic,retain)NSString* name;
@property(nonatomic,retain)NSString* address;
@property(nonatomic,retain)NSNumber* age;
@end
(这个测量你是从UIButton中分类的,而不是从UIView一直来的)。
在接口声明中,您可以设置新属性,记得将它们声明为属性,以便以后可以访问它们。
你最终会得到这样的东西:
@synthesize
请记住- (id)initWith:(NSString*)aName and:(NSString*)aStreet and:(NSNumber*)anAge{
self = [super init];
self.name = aName;
self.address= aStreet;
self.age=anAge;
return sef;
}
您的财产。
要执行自定义初始化,您只需编写自己的init方法:
{{1}}祝你好运!