【问题标题】:Can't modify a UIView that was created in storyboard无法修改在情节​​提要中创建的 UIView
【发布时间】:2014-07-05 14:49:10
【问题描述】:

我正在尝试修改在情节​​提要中创建的视图。我可以读取并记录视图的属性(如框架——见下文),它们与预期的一样,所以我确定我对视图有有效的引用。我想做各种修改,包括更改其背景颜色和仿射变换并为其添加标签,但我无法进行任何修改。

一些代码:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
self.storyboardVC = [sb instantiateInitialViewController];
self.viewA = [self.storyboardVC.view viewWithTag:77];
NSLog(@"\nVC: %@\nviewA: %@", self.storyboardVC, self.viewA);

self.viewA.backgroundColor = [UIColor greenColor];
CGRect r = CGRectMake(100, 25, 50, 50);
UILabel *tag = [[UILabel alloc] initWithFrame:r];
tag.backgroundColor = [UIColor orangeColor];
tag.text = @"tag";
[self.viewA addSubview:tag];

尺寸使得标签标签应该适合viewA,但“标签”标签永远不会出现。背景颜色也永远不会改变。我设置了 viewA alpha = 0.4,所以我可以看到标签标签是否在它后面,但是没有。所有视图都启用了 userInteractionEnabled,并在情节提要中选中了自动调整大小的子视图。

我还尝试了其他编程修改,但它们都没有做任何事情。就好像视图是只读的。我在这里错过了什么?

【问题讨论】:

    标签: ios7 uiview storyboard


    【解决方案1】:

    您缺少的是 Cocoa 是一个框架。你必须了解它在做什么,并且与它一起工作,而不是反对它。

    这里的问题是这不是使用视图控制器及其视图的合法方式:

    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    self.storyboardVC = [sb instantiateInitialViewController];
    self.viewA = [self.storyboardVC.view viewWithTag:77];
    

    您任意拉出(实例化)视图控制器 (storyboardVC) 并使用其视图 (viewA),但该视图控制器不是您应用的视图控制器层次结构的一部分,视图也不属于它的视图层次结构 - 这一切都不会发生在您的应用程序界面中。所以自然你什么都看不到。您可以在刚刚丢弃的不可见副本上完成所有这些操作。 (您知道,您不能使用代码来更改故事板本身;故事板确实是只读的。)

    要对您的视图进行实际可见的更改,请等到框架告诉您该视图即将出现在界面中(例如,您的视图控制器的viewDidLoadviewWillAppear)。这就是这类生命周期事件消息的用途。

    【讨论】:

    • 我显示的代码在我应用的视图控制器的 viewDidAppear:animated 中。这不是正确的地方吗?
    • 但是视图已经是self.view — 正如我所说,您从情节提要中拉出的视图是您正在创建和丢弃的副本。例如,也许您的意思是[self.view viewWithTag:77]
    • 我想了好几次你的cmets,顿悟了。你没有指出我的根本误解,但你帮助我看到了它。直到现在我才意识到,当我开始一个项目时,我的项目中包含的名为“ViewController”的类是故事板中顶部 ViewController 的一个实例。 (我认为就是这样说的。)我现在看到,当故事板 ViewController 被选中时,它的类被标识为自定义类 ViewController,而不是 UIViewController。
    • 我已经做了几年 Xcode 和 iOS 了(从 Xcode 3 开始),但从来没有得到过这个。大部分时间我都使用 cocos2d 并且从未使用 storyboard 或 InterfaceBuilder 所以当我开始使用 storyboard 时,它看起来很神奇。我怀疑故事板中 ViewController 对象的清晰解释是否明确出现在 Apple 文档的任何地方。
    • @RobertL 如果您查看我的简历,您会发现我已经尝试过补救... :)
    猜你喜欢
    • 2013-12-16
    • 2020-06-08
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 2016-04-02
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多