Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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
Objective c 视图控制器内部视图控制器赢得';无法接收轮换消息-ios_Objective C_Ios_Uiscrollview_Rotation - Fatal编程技术网

Objective c 视图控制器内部视图控制器赢得';无法接收轮换消息-ios

Objective c 视图控制器内部视图控制器赢得';无法接收轮换消息-ios,objective-c,ios,uiscrollview,rotation,Objective C,Ios,Uiscrollview,Rotation,我有一个定制的视图控制器(我们称之为包装器)。其视图仅包含一个UIScrollView。scroll视图包含另一个自定义视图控制器(我们称之为内部视图),它是从xib文件初始化的(scroll视图本身也是从xib文件初始化的,但我认为这并不重要) 包装器视图使用包含多个类似视图控制器的UITabBarController显示 我有一个奇怪的问题:包装器的旋转函数-应该自动旋转,willAnimateRotation-每次我旋转设备时都会被调用。由于某些原因,内部视图的旋转函数不会被调用,但它仍然

我有一个定制的视图控制器(我们称之为包装器)。其视图仅包含一个
UIScrollView
。scroll视图包含另一个自定义视图控制器(我们称之为内部视图),它是从xib文件初始化的(scroll视图本身也是从xib文件初始化的,但我认为这并不重要)

包装器视图使用包含多个类似视图控制器的
UITabBarController
显示

我有一个奇怪的问题:包装器的旋转函数-
应该自动旋转
willAnimateRotation
-每次我旋转设备时都会被调用。由于某些原因,内部视图的旋转函数不会被调用,但它仍然会旋转。内部视图的
shouldAutoRotate
在初始化时(应用程序启动时)会被调用

我看了谷歌,找不到任何与我的案件相关的东西。我不确定它是否相关,但在所有xib文件上都会检查自动调整子视图的大小

如果你能帮我解决这个问题,我会很高兴的。我需要在旋转时调用内部视图的旋转函数,以便手动排列它,但我希望避免从包装视图调用它们(而是让它按应有的方式工作)


提前谢谢你

innerViewController的旋转函数不会被调用,因为它们是作为子视图添加到scrollView中的。您可以做的是,当父控制器中的方向发生变化时,生成一个NSNotification,然后您可以在子视图中接收通知并相应地管理它们。或者,当在父控制器中调用shouldAutorotate时,您可以遍历UIScrollView的子视图,然后手动调用子视图的shouldAutorotate方法。希望您理解。

iOS 4不支持在自定义ViewController中嵌套ViewController。不过,您通常可以手动将所有必要的消息转发给您的孩子VC,并获得可接受的结果。

最简单的方法是在.h文件中保存一些
UIInnerViewController*innerController
,并在.m中调用inner
-(BOOL)应在包装器内部自动旋转指向面方向:(UIInterfaceOrientation)interfaceOrientation
,如下所示:

wrapper.m
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
    BOOL innerResult = [innerController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
    //may be more computations here
    return innerResult;// or any other value, based on your needs
}
您可以使用的另一种方法是向UIDeviceOrientationIDChangeNotification注册内部控制器,如下所示:

[[NSNotificationCenter defaultCenter] addObserver:self 
                                      selector:@selector(orientationChanged:) 
                                      name:UIDeviceOrientationDidChangeNotification 
                                      object:nil];

以及
-(void)方向更改中的布局子视图:(NSNotification*)通知在同一内部控制器中。您唯一应该了解的是,
UIDeviceOrientation
UIInterfaceOrientation
稍有不同,并且可能具有在大多数情况下不适用于UI更改的
UIDeviceOrientationFaceUp
值,但是我想知道-为什么外部viewController不将函数发送到它的子视图?看起来很奇怪。无论如何,我会手动调用它,只是想知道为什么它会这样工作。谢谢