根据按下的按钮(iOS)检索自定义数据?

时间:2011-02-12 21:19:01

标签: iphone objective-c ipad ios interface-builder

如果这是一个简单的问题我很抱歉,但我一直无法找到足够的解决方案而且我让自己有点疯狂:P

我在各种视图上都有一个带有多个按钮(40-50)的应用程序,并且应该根据按下哪个按钮构建一个包含多个条目的字典。

(例如,如果按下按钮27,我将在viewController中构建一个Dict: 名称 - >约翰·史密斯 地址 - > 1无限循环 年龄 - > 99 )

显然,编写特定于每个按钮的操作是错误的。

我想要做的是继承UIButton(继续上面的例子),将Name,Address和Age作为实例变量添加到我的自定义Button,并在按钮实例化时设置每个实例变量一个初始化: 然后,当按下该按钮时,我可以有一个由所有按钮调用的SINGLE buildDict:(id)发送者动作,只需用sender.Name等填充字典......

我的问题是:我可以在Interface Builder中的属性检查器中添加字段来设置这些值吗?如果这不可能,我在哪里可以找到按钮实例,以便我可以以编程方式设置这些值?

2 个答案:

答案 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}}
祝你好运!