我有一个UITableViewController和DetailViewController,当选择具体行时会弹出。问题是当在DetailViewController中进行旋转时,tableView不会调用“didRotateFromInterfaceOrientation”方法。这是合乎逻辑的,但是如果方向已经改变,我需要重新加载一个表。
我正在尝试使用此代码,但它不起作用:
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
if (self.interfaceOrientation != [UIDevice currentDevice].orientation){
[self handleTableViewRotation];
}
}
我假设应该有一些属性保持tableView的方向,它独立于当前的设备方向属性......
答案 0 :(得分:2)
也许最优雅的解决方案是编写协议。只要您的DetailViewController
进入轮播回调,请调用tableView的reloadData
方法。
或者......你可以继续这样做。在这种情况下,您必须将tableViewController的最后一个方向存储为实例var并将其与当前值进行比较。之后,请记住设置新方向
编辑:首先声明一个新协议。
@protocol RotationDelegate
- (void) didRotate;
@end
在DetailViewController.h中:
#import RotationDelegate.h
@interface DetailViewController : UIViewController {
id <RotationDelegate> rotationDelegate;
}
@property (nonatomic, assign) id <RotationDelegate> rotationDelegate;
在DetailViewController.m中:
@synthesize rotationDelegate;
-(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
[rotationDelegate didRotate];
}
现在你的ViewController包含tableView:
@interface RootViewController : UITableViewController <RotationDelegate> {
...
}
最后实现didRotate
方法并在其中调用[yourTableView reloadData]
。请记住,在初始化DetailViewController之后必须设置旋转委托。