Hug*_*ugo 5 iphone objective-c uitableview ios
对于一个应用程序我建设,我有一个UIPageViewController里面UIView有Transition Style = Scroll.每个页面都具有相同的UITableViewController类(当然具有不同的数据).在这一点上一切正常.
现在我希望拥有横向版本或纵向版本,UITableViewController具体取决于设备的方向.为此我实现了NSNotification一个方法被调用方向更改(orientationChanged),这也有效.但是从这里出现问题,当改变设备的方向时我不知道如何加载正确的UITableViewController实例.正如你可以看到我使用的委托方法viewControllerAtIndex中的UIPageViewControllerDataSource中,我确认的viewController的横向或纵向的版本开始.
问题是当改变设备的方向时,UITableViewController只有在向左/向右扫描几页之后才加载正确的.我必须忽略一些简单的东西,但似乎无法找到它!
我有以下代码片段,其中我认为问题是:
- (void)viewDidLoad
{
[super viewDidLoad];
// Create the data model
_pageTitles = @[@"1",@"2",@"3",@"4",@"5"];
_pageTables = @[@"test1",@"test2",@"test3",@"test4",@"test5"];
// Create page view controller
self.weightPageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"WeightPageViewController"];
self.weightPageViewController.dataSource = self;
WeightPageContentViewController *startingViewController = [self viewControllerAtIndex:0];
NSArray *viewControllers = @[startingViewController];
[self.weightPageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
[self addChildViewController:_weightPageViewController];
[self.view addSubview:_weightPageViewController.view];
[self.weightPageViewController didMoveToParentViewController:self];
self.edgesForExtendedLayout = UIRectEdgeNone;
//Register for device orientation changes.
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];
}
- (void) orientationChanged:(id)object {
[self viewControllerAtIndex:0];
}
- (WeightPageContentViewController *)viewControllerAtIndex:(NSUInteger)index
{
if (([self.pageTitles count] == 0) || (index >= [self.pageTitles count])) {
return nil;
}
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(deviceOrientation)) {
NSLog(@"Orientation is now Landscape);
// Create a new view controller and pass suitable data.
WeightPageContentViewController *weightPageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"WeightPageContentViewControllerLandscape"];
weightPageContentViewController.tableText = self.pageTables[index];
weightPageContentViewController.titleText = self.pageTitles[index];
weightPageContentViewController.pageIndex = index;
return weightPageContentViewController;
} else if (deviceOrientation == UIDeviceOrientationPortrait) {
NSLog(@"Orientation is now Portrait);
// Create a new view controller and pass suitable data.
WeightPageContentViewController *weightPageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"WeightPageContentViewController"];
weightPageContentViewController.tableText = self.pageTables[index];
weightPageContentViewController.titleText = self.pageTitles[index];
weightPageContentViewController.pageIndex = index;
return weightPageContentViewController;
} else {
NSLog(@"Orientation is now unknown);
// Create a new view controller and pass suitable data.
WeightPageContentViewController *weightPageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"WeightPageContentViewController"];
weightPageContentViewController.tableText = self.pageTables[index];
weightPageContentViewController.titleText = self.pageTitles[index];
weightPageContentViewController.pageIndex = index;
return weightPageContentViewController;
}
}
Run Code Online (Sandbox Code Playgroud)
每次方向更改时,您需要再次设置视图控制器
WeightPageContentViewController *startingViewController = [self viewControllerAtIndex:currentViewControllerIndex];
NSArray *viewControllers = @[startingViewController];
[self.weightPageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3136 次 |
| 最近记录: |