2010-07-04 53 views
0

我是iPhone开发新手。我的应用程序正在动态创建按钮,从我的数据模型开始。该模型不仅仅是一个简单的列表;它是一棵树。我需要一些方法将创建的按钮关联到该数据模型,以便当单击按钮时,我知道它对应的模型的哪一部分。如何将UIButton链接到我的数据对象? (iPhone/Objective C)

在Windows上,大多数UI控件都有一个“标记”字段,您可以在其中放置自定义数据。使用类似的模式,我想在iPhone上做的是这样的:

- (void)createMyButton:(MyModel*)foo 
{ 
    UIButton* button = <insert creation code here> 
    [button addTarget:self action:@selector(handleCreatedButtonTouch:) ...]; 
    button.tag = foo; 
} 

- (void)handleCreatedButtonTouch:(id)sender 
{ 
    UIButton* button = (UIButton*)sender; 
    MyModel* foo = (MyModel*)(button.tag); 
    [foo userTouchedMyButton]; 
} 

我找不到苹果文档中这样的字段的任何提及。你如何做iPhone的大师呢?再一次,我没有任何简单的索引到我的数据模型的方法,并且对整个数据模型进行枚举以找到匹配似乎是非常错误的。

回答

1

安德鲁,

在iPhone SDK UI元素具有类似于你所描述的一个tag属性。如果你正在寻找使用button.tag,那么你可以开箱即用。

对您的伪代码的唯一更改应该在您的handleCreatedButtonTouch:方法中。行:

MyModel* foo = (MyModel *)(button.tag); 

会尝试将tag财产转换为MyModel对象。你可能会想在MyModel中创建一个初始化程序来处理查找,例如:

MyModel *foo = [[MyModel alloc] initFromButtonWithTag:[sender tag]]; 

希望这会有所帮助。

+0

This Works,thanks!我再次浏览文档,并在MacOS X文档中找到了“NSControl”,但不是iPhone的“UIControl”。那是怎么回事?文档关闭了吗? – AndrewS 2010-07-04 03:21:44

+0

有时,您必须深入研究文档以找到您要查找的内容。 'UIButton'继承自'UIControl','UIControl'继承自'UIView','UIView'具有'tag'属性。您可以将其视为:UIControl:UIView:UIResponder:NSObject,其中UIView支持'tag'。 – 2010-07-06 19:33:26

+0

为什么要创建一个新对象?如果一个人想要通过一个现有的对象呢? – user102008 2011-04-06 23:01:10

相关问题