只需要对视图对象进行一些澄清。如果我在这里提到的任何内容都不清楚,请告诉我。
只有几个问题:
创建属性对于诸如标签之类的对象有什么作用?
为什么我们不需要为我们创建的某些按钮创建属性?
为什么我们必须为某些视图对象创建属性?我问这个是因为我创建了一个开关,但我想用它的值发送到我的模型,但我必须创建一个属性才能使它工作。这与交换机的getter和setter有关吗?
答案 0 :(得分:3)
创建属性对于诸如标签之类的对象有什么作用?
当您说“创建属性”时,我认为您的意思是在视图控制器中创建IBOutlet
属性以引用相关标签。目的是允许您以编程方式与该标签进行交互(例如,更改其显示的文本等)。如果您不打算与该标签进行交互(例如它只是一个提示),则不需要IBOutlet
。但是,如果您需要与之互动(例如,根据其他地方的其他用户输入更改其值),那么您可能会有IBOutlet
。
为什么我们不需要为我们创建的某些按钮创建属性?
您只需要为将要以编程方式与之交互的对象创建IBOutlet
个引用(例如,更改按钮上的文本,检索开关的值),否则您不需要{ {1}}财产。在按钮的情况下,您可能有IBOutlet
,或者如果使用segues,您甚至可能不需要它。您通常根本不需要IBAction
属性引用(但如果您因任何原因需要它,可以有一个)。
但简而言之,您只需要为您将在自己的代码中与之交互的控件创建IBOutlet
属性引用。
为什么我们必须为某些视图对象创建属性?我问这个是因为我创建了一个开关,但我想用它的值发送到我的模型,但我必须创建一个属性才能使它工作。这与交换机的getter和setter有关吗?
如果您想从某个随机方法访问IBOutlet
的状态,那么,是的,getter方法将使您更容易这样做。通过定义属性,将为您合成getter方法。
另一方面,如果您UISwitch
的“值已更改”事件与IBAction
相关联,则可以从UISwitch
参数访问该事件,而无需其他属性
sender
但是如果你想从其他方法访问- (IBAction)changedSwitchValue:(id)sender
{
UISwitch *switchControl = sender;
if (switchControl.on)
NSLog(@"Switch is on");
else
NSLog(@"Switch is off");
}
的{{1}}属性,那么拥有on
属性引用非常有用。
答案 1 :(得分:1)
创建属性对于诸如标签之类的对象有什么作用?
属性用于为实例变量生成getter和setter
您可以手动实现相同的访问者。如果你在谈论IBOutlet
那么它就是在GUI对象和...之间进行交互的方式。代码(您访问对象的属性),IBOutlet
成为用户界面上添加的对象与代码之间的连接
为什么我们不需要为我们创建的某些按钮创建属性?
有时当您在不使用.xib或GUI的情况下创建对象时,您不需要创建IBOutlet
,而只能使用类中没有出口的属性来访问对象的属性,但在这种情况下,您必须手动将所有方法设置为对象的选择器,例如UIButton
。
You can find good references here to get to know how it works in practice