0

我有两个视图控制器和笔尖。我用切换开关填充了一个视图控制器,并在其头文件中声明了这一点:

@public UISwitch *toggleSwitch;

并将其公开为这样的属性:

@property (nonatomic,retain) IBOutlet UISwitch *toggleSwitch;

我还将开关与toggleSwitch插座连接。现在我想toggleSwitch在我的另一个视图控制器中使用这个字段,我该怎么做?@public在字段声明中使用还不够吗?请帮忙。谢谢你。

4

2 回答 2

0

完全没有问题。只需像这样使用开关:

vcWhereYouDeclaredTheSwitch.toggleSwitch.on = YES;

或者

BOOL test = [vcWhereYouDeclaredTheSwitch.toggleSwitch isOn];

在您的其他视图控制器中。

以下是关于属性的一些一般性想法:

  • 内存管理:在幕后它将创建一个设置器,该设置器创建具有正确 内存管理的变量。它将为您省去一些麻烦,因为您可以很容易地看到内存管理是如何完成的(strong/weakretain/ copy/ assign)。

  • 其他类的可访问性:如果你@property在 .h 中声明你的@synthesize,在 .m 中声明你的 ivar 将是公共可读和可写的。您可以使用 privat 类扩展来防止这种情况。您甚至可以声明一个@property公共并通过私有类扩展readonly在内部声明它们。readwrite例如:私有财产

   // [In the implementation file]  
   @interface MyClass ()  
   @property (nonatomic, retain) NSMutableArray* someData; // private!!   
   @end  

   @implementation MyClass @synthesize someData   
   @end
  • 自定义 getter 和 setter:如果您愿意,您仍然可以编写自定义 getter 和 setter,您甚至可以只编写一个 getter 或 setter 并让另一个自动生成@synthesize。您可以将自定义逻辑写入这样的 getter 和 setter,例如,您可以在 a@property更改后重新加载 tableview。

  • 自动键值观察 (KVO) 兼容:如果您使用或计划使用 KVO,您只需声明属性即可基本上免费获得它。没有其他事情需要做!

  • 如果您需要公开 iVar,那么编写一个@property比为 iVar 编写 getter 和 setter更简单

  • 使用 a@property您无需在 iVar 中声明(在 iOS 和 64 位 Mac Os X 应用程序中)。您可以通过以下方式进行@synthesize

    @synthesize myiVar = _myIvar;
于 2012-07-13T06:35:24.117 回答
0

你已经创建了 UISwitch 的属性。因此,您可以通过使用 viewcontroller 对象在任何地方使用它。

假设您想在当前所在的视图中使用它然后使用它

self.toggleSwitch

// 或者

viewControllerObject.toggleSwitch

于 2012-07-13T07:13:29.910 回答