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

eri*_*son 1 iphone objective-c interface-builder ipad ios

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

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

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

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

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

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

Mat*_*uch 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
}
Run Code Online (Sandbox Code Playgroud)

不需要子类化任何东西.无需违反模型 - 视图 - 控制器概念.