为啥我不能使用 StoryBoard 从 viewWithTag 方法访问嵌套的 UIView?
Posted
技术标签:
【中文标题】为啥我不能使用 StoryBoard 从 viewWithTag 方法访问嵌套的 UIView?【英文标题】:Why can't I access to nested UIView from viewWithTag method using StoryBoard?为什么我不能使用 StoryBoard 从 viewWithTag 方法访问嵌套的 UIView? 【发布时间】:2015-04-30 18:09:29 【问题描述】:我在 Storyboard 的嵌套 UIView 中创建了一些 UIImageView,并为每个 UIImageView 创建了不同的 TAG。根据 Storyboard,ViewController 的树是这样的:
视图控制器 查看 视图嵌套 UIImageView1 UIImageView1 UIImageView1 UIImageView1我必须以编程方式更改这些 ImageView,为了获取图像,我使用方法 viewWithTag
,但它不起作用,因为它返回 NIL
。
即使我将ViewNested IBOutlet
添加到我的班级并使用以下代码获取视图,也会发生这种情况:
// View is the top View with Tag:40
UIView * view = [self.view viewWithTag:40]; //This works
// The nestedView with Tag:44
UIView * viewNested = [view viewWithTag:44]; //DOESN'T work it returns NIL even if the TAG is exact
然后,如果我尝试使用相同的方法访问 imageView,当然会返回NIL
。我不知道为什么,我也尝试使用此代码查看所有递归嵌套视图,但即使它们存在于情节提要中,它们似乎也不存在。
- (void)showAllSubView:(UIView *)view
int i = 0;
for (UIView * subView in [view subviews])
NSLog(@"%@, tag:%ld", subView, (long)subView.tag) ;
[self showAllSubView:subView] ;
i++;
NSLog(@"Numb of Views %d", i) ;
根视图的 TAGS 为 40,嵌套视图为 44,图像为 1,2,3,4。所以 TAGS 都是不同的。
任何帮助将不胜感激:)。提前致谢
【问题讨论】:
更新您的问题并显示层次结构中每个视图的标签。 为什么不使用 IBOutlet? 如果showAllSubView
说它们不是viewNested
的子视图,是什么让你认为它们应该是?
要查看实际情况,请在您确定所有视图都已加载的代码中的某处插入断点,然后在调试区域控制台中运行此命令:po [self.view recursiveDescription]
。它将打印完整的视图层次结构,包括标签。
@OMGHaveFun 因为我有 18 个 UIImageView,所以我会通过 TAG 而不是 IBOutlet 访问它们
【参考方案1】:
UIImageView *imageView=(UIImageView *)[self.view viewWithTag:yourTag];
[imageView setImage:[UIImage imageNamed:@"yourImageName"]];
将 yourTag 替换为 UIImageView 标签; 用一些图像名称替换 yourImageName
如果您只想更改 ImageViews 的图像 - 您不需要
UIView * view = [self.view viewWithTag:40]; //This works
// The nestedView with Tag:44
UIView * viewNested = [view viewWithTag:44];
您还可以更改所有图像:
for (int i=0; i<18; i++)
UIImageView *imageView=(UIImageView *)[self.view viewWithTag:i];
NSString *imageName = [NSString stringWithFormat:@"imageName_%d", i];
[imageView setImage:[UIImage imageNamed:imageName]];
【讨论】:
以上是关于为啥我不能使用 StoryBoard 从 viewWithTag 方法访问嵌套的 UIView?的主要内容,如果未能解决你的问题,请参考以下文章
在Storyboard中,如何让view从状态栏顶部开始布局
iOS最牛逼得自定义View方式支持storyboard显示
IOS / Storyboard:使用Autolayout在一个故事板中复制和粘贴View Controller是否安全