1

只需要对视图对象进行一些说明。如果我在这里提到的任何事情不清楚,请告诉我。

只是几个问题:

为诸如标签之类的对象创建属性究竟做了什么?

为什么我们不需要为我们创建的某些按钮创建属性?

为什么我们必须为某些视图对象创建属性?我问这个是因为我创建了一个开关,但我想使用它的值发送到我的模型,但我必须创建一个属性才能使其工作。这与开关的getter和setter有关吗?

4

2 回答 2

3

为诸如标签之类的对象创建属性究竟做了什么?

当您说“创建属性”时,我假设您的意思是IBOutlet在视图控制器中创建一个属性以引用相关标签。目的是允许您以编程方式与该标签进行交互(例如更改它显示的文本等)。如果您不打算与该标签进行交互(例如,它只是一个提示),则IBOutlet不需要。但是,如果您需要与它交互(例如,根据其他地方的一些其他用户输入更改它的值),那么您可能有一个IBOutlet.

为什么我们不需要为我们创建的某些按钮创建属性?

您只需要为IBOutlet您将以编程方式与之交互的那些对象创建引用(例如更改按钮上的文本,检索开关的值),否则您不需要IBOutlet属性。对于按钮,您可能有一个IBAction,或者如果使用 segue,您甚至可能不需要它。您通常根本不需要IBOutlet按钮的属性引用(但如果出于任何原因需要它,您可以拥有一个)。

但简而言之,您只需IBOutlet为将在您自己的代码中与之交互的那些控件创建属性引用。


为什么我们必须为某些视图对象创建属性?我问这个是因为我创建了一个开关,但我想使用它的值发送到我的模型,但我必须创建一个属性才能使其工作。这与开关的getter和setter有关吗?

如果你想UISwitch从一些随机方法中访问状态,那么,是的,getter 方法会让你很容易做到这一点。并且通过定义一个属性,会为你合成getter方法。

另一方面,如果您有一个IBAction与“值更改”事件相关联的UISwitch,您可以从sender参数访问它而无需额外的属性。

- (IBAction)changedSwitchValue:(id)sender
{
    UISwitch *switchControl = sender;

    if (switchControl.on)
        NSLog(@"Switch is on");
    else
        NSLog(@"Switch is off");
}

但是如果你想从其他方法访问on属性,拥有一个属性引用是非常有用的。UISwitchIBOutlet

于 2013-03-07T15:03:27.400 回答
1

为诸如标签之类的对象创建属性究竟做了什么?

属性用于为实例变量生成 getter 和 setter 您可以手动实现相同的访问器。如果您正在谈论,IBOutlet那么它是 GUI 对象和代码之间交互的方式(您可以访问对象的属性),IBOutlet成为用户界面上添加的对象与代码之间的连接

为什么我们不需要为我们创建的某些按钮创建属性?

有时,当您在不使用 .xib 或 GUI 的情况下以编程方式创建对象时,您不需要创建对象,IBOutlet而是可以只使用类中没有插座的属性来访问对象的属性,但在这种情况下,您将拥有手动将所有方法设置为对象的选择器,例如在UIButton.

你可以在这里找到很好的参考资料来了解它在实践中是如何工作的

于 2013-03-07T15:12:25.813 回答