Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 带标签的视图不';行不通_Ios_Objective C - Fatal编程技术网

Ios 带标签的视图不';行不通

Ios 带标签的视图不';行不通,ios,objective-c,Ios,Objective C,我的viewWithTag有问题。我使用此代码以编程方式从故事板调用UIViewController。然后我想设置2个imageView,并使用viewWithTag UIStoryboard *storyboard = self.storyboard; BattleViewController *svc = [storyboard instantiateViewControllerWithIdentifier:@"BattleViewController"]; UIImageV

我的
viewWithTag
有问题。我使用此代码以编程方式从故事板调用
UIViewController
。然后我想设置2个imageView,并使用viewWithTag

UIStoryboard *storyboard = self.storyboard;
    BattleViewController *svc = [storyboard instantiateViewControllerWithIdentifier:@"BattleViewController"];
    UIImageView*newImage=(UIImageView*)[svc.view viewWithTag:123];
    newImage.image=[UIImage imageNamed:@"1"];
    UIImageView*img2=(UIImageView*)[svc.view viewWithTag:234];
    img2.image=[UIImage imageNamed:@"2"];

[self presentViewController:svc animated:YES completion:nil];

在此之后,视图控制器被正确调用,但两个imageView是空的,上面没有任何内容。

问题可能是您这样做太早了。当
svc
(您的BattleViewController实例)首次创建时,它甚至没有视图。进行设置,以便您可以在此处将图像文件名交给视图控制器,但让视图控制器本身在其自己的
viewdiload

视图控制器是什么类型的? 这是桌面视图吗?这是另一种观点吗? 标签中的视图可能位于BattleViewController的子视图中

试试这个:

NSLog(@"subviews = %@", svc.view.subviews)
这将输出svc中的视图总数。如果有多个子视图,则带有标记的图像可能位于其中一个子视图下(因此:

UIImageView*newImage=(UIImageView*)[[svc.view.subviews objectAtIndex:1] viewWithTag:123]];

您确实在序列图像板中的BattleViewController中设置了标记,对吗?是的,在序列图像板中,我使用相同的标记设置了uiimageview,并且您100%确定这些图像(1.png和2.png)在您的主捆绑包中,对吗?尝试为您的
BattleViewController
类中的
UIImageView
s创建
IBOutlet
s,并将它们连接到您的故事板中。此外,正如马特在回答中所建议的,您应该在
viewDidLoad
中处理这些图像的设置。正如加文所指出的,IBOutlet是一个更好的wa你说他应该在
viewDidLoad
中处理这个问题是对的,但这不是他的问题,因为只要他调用
svc.view
,就会导致视图被加载。@Gavin同意,这就是我说“可能”的原因: