对象 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的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 Button 样式对象仅适用于按钮内的文本,而不适用于整个按钮?
如何使 jQuery UI droppable hoverClass 仅适用于可拖动对象?
循环遍历数组对象以检查值匹配仅适用于第一次迭代,后续迭代失败