我刚开始学习Objective-C / Cocoa Touch。我正在开发一个允许动态创建视图的应用程序(为了这个问题,我们假设单击某个按钮会导致按钮和标签被添加到当前视图中)
因此,当用户点击此“创建按钮”时,新的按钮和标签将添加到当前视图中。当用户点击新创建的按钮时,我希望新创建的标签中的文本更改为。现在我知道我可以在运行时创建它时为按钮分配一个IBAction,但我不确定如何将新标签与Outlet相关联。
此外,我想用尽可能少的代码来做这件事,但我不知道这是怎么回事。 AFAIK是我能真正识别视图中控件的唯一方法是它们的tag属性并不完全有用所以我将有一个事件处理程序,最终看起来像这样(伪代码):
switch(tag)
{
case 1:
//label1.text = @"foo";
break;
case 2:
//label2.text = @"foo";
break;
//etc
}
在C#中我可以做类似的事情(假设e是CommandEventArgs,所有按钮都连接到这个事件,而CommandName包含我们想要更新的标签的id):
Label lbl = (Label)panel1.FindControl(e.CommandName);
lbl.Text = "foo";
所以我的问题是
谢谢!
答案 0 :(得分:4)
IBOutlets的目的通常是让您将Interface Builder中创建的内容与代码中的实例变量相关联。由于您在代码中创建视图以开始,听起来您应该只是在实例变量中存储对它们的引用而不必担心IBOutlets。
答案 1 :(得分:0)
如果你有:
UILabel *localVariableForLabel = ...some label just created...
并且您希望将其存储到插座'instanceVariableForLabel',您可以使用键值编码。所以:
[targetObject setValue:localVariableForLabel forKey:@"instanceVariableForLabel"];
或传递任何其他NSString
。这正是Cocoa在加载NIB时所做的事情,也是您的网点需要符合键值编码的原因。
我不清楚你在创建一个新的插座时究竟是什么意思,但是如果你想将标签放在某处并稍后通过名称访问它,NSDictionary
可能就是你所期待的对