对象 addSubview 仅适用于 viewDidLoad

Posted

技术标签:

【中文标题】对象 addSubview 仅适用于 viewDidLoad【英文标题】:Object addSubview only works in viewDidLoad 【发布时间】:2010-06-16 07:32:32 【问题描述】:

我是 iPhone 开发新手,在添加子视图方面需要一些帮助。

我有一个我制作的可重用对象,它存储在单独的 .h .m 和 xib 文件中。 我想在我的主项目的视图控制器中使用这个对象。我已经包含了标题,并且对象的分配不会产生错误。我可以将对象加载到我的主项目中,但只能在我的 viewDidLoad 方法中使用它。我打算在我的屏幕上显示一些这样的对象,并且正在寻找一种更强大的解决方案,而不是硬连接形状对象的多个副本。

当我尝试访问 viewDidLoad 之外的对象时,它会产生一个变量未知错误 - 首先在此函数中使用。

这是我的 viewDidLoad 方法:

shapeViewController *shapeView = [[shapeViewController alloc] initWithNibName:@"shapeViewController" bundle:nil];

[self.view addSubview: shapeView.view];

//这是问题行 // 这段代码可以改变形状对象的显示

[shapeView updateDisplay:@"123456"];

---- 但是 viewDidLoad 之外的相同代码会产生错误。

总而言之,除了我尝试在其余方法中访问 shapeView 对象时,一切正常。

提前致谢

【问题讨论】:

【参考方案1】:

您需要在界面中声明 shapeView 实例,而不仅仅是在一个函数中。那么函数中的代码就变成了一个初始化而已。

因此,在您的 .h 文件中,在 @interface 中您编写 声明

shapeViewController *shapeView;

并且在你的 viewDidLoad 中,你会初始化你之前声明的内容:

shapeView = [[shapeViewController alloc] initWithNibName:@"shapeViewController" bundle:nil];
[self.view addSubview:shapeView.view];

现在您可以在整个班级中使用 shapeView。

【讨论】:

您好伊万斯,感谢您的意见。当我在界面中声明 shapeView 实例时,出现错误“'shapeView' 的本地声明隐藏实例变量。 你没有提到dealloc 或使用属性吗?我希望你不希望@DecodingSand 面临内存泄漏......

以上是关于对象 addSubview 仅适用于 viewDidLoad的主要内容,如果未能解决你的问题,请参考以下文章

绑定是不是仅适用于 DependencyProperty?

为啥我的 Button 样式对象仅适用于按钮内的文本,而不适用于整个按钮?

如何使 jQuery UI droppable hoverClass 仅适用于可拖动对象?

循环遍历数组对象以检查值匹配仅适用于第一次迭代,后续迭代失败

一个可作为 ReplaySubject 但仅适用于第一个订阅者的 Rx 可观察对象?

sonata_type_collection 字段仅适用于现有的父对象