从detailView返回tableView时如何检测旋转变化?

时间:2011-09-16 07:52:31

标签: iphone objective-c rotation uitableview

我有一个UITableViewController和DetailViewController,当选择具体行时会弹出。问题是当在DetailViewController中进行旋转时,tableView不会调用“didRotateFromInterfaceOrientation”方法。这是合乎逻辑的,但是如果方向已经改变,我需要重新加载一个表。

我正在尝试使用此代码,但它不起作用:

- (void)viewWillAppear:(BOOL)animated{
  [super viewWillAppear:animated];
  if (self.interfaceOrientation != [UIDevice currentDevice].orientation){
    [self handleTableViewRotation];
  }
}

我假设应该有一些属性保持tableView的方向,它独立于当前的设备方向属性......

1 个答案:

答案 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之后必须设置旋转委托。