lji*_*atu 8 objective-c ios uipageviewcontroller
我发现这两个UIPageViewControllerDataSource方法存在一个奇怪的问题:第一次进入页面视图控制器场景并拖动控制器的内容时,无论拖动方向是什么,都会调用两个数据源方法.我想当我在第一页并向右拖动时,这意味着在第一页之前没有更多的页面,这两种方法都不应该被调用.如果我向左拖动,只应调用after方法.
我按照这篇文章来设置视图控制器(除了我在故事板上没有单独的页面视图控制器.我使用传统[UIPAgeViewController alloc] init]方法来实例化控制器).以下是我的代码:
对于实际显示页面视图控制器内容的视图控制器(仅显示相关部分viewDidLoad):
- (void)viewDidLoad
{
// initialize page view controller
_pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
self.pageViewController.delegate = self;
self.pageViewController.dataSource = self;
// set up the initial scene of the page view controller
UIViewController *viewController = [self viewControllerAtIndex:0];
[self.pageViewController setViewControllers:@[viewController]
direction:UIPageViewControllerNavigationDirectionForward
animated:NO
completion:nil];
// adjust the size of the page view controller, -44 to show the buttons at the bottom
self.pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 44);
// display the content of the page view controller
[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerBeforeViewController:(UIViewController *)viewController
{
NSUInteger index = ((PWCPageContentViewController *)viewController).index;
if (index == 0 || index == NSNotFound) {
return nil;
}
--index;
return [self viewControllerAtIndex:index];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerAfterViewController:(UIViewController *)viewController
{
NSUInteger index = ((PWCPageContentViewController *)viewController).index;
if (index == self.numberOfPages - 1 || index == NSNotFound) {
return nil;
}
++index;
return [self viewControllerAtIndex:index];
}
- (PWCPageContentViewController *)viewControllerAtIndex:(NSUInteger)index
{
PWCPageContentViewController *viewController =
[self.storyboard instantiateViewControllerWithIdentifier:@"PageContentViewController"];
viewController.index = index;
NSString *text = [self.notes getNoteAtIndex:index];
[viewController.textView setText:text];
return viewController;
}
Run Code Online (Sandbox Code Playgroud)
对于PWCPageContentViewController.h:
#import <UIKit/UIKit.h>
@class PWCNotes;
@interface PWCPageContentViewController : UIViewController <UITextViewDelegate>
@property NSUInteger index;
@property (weak, nonatomic) IBOutlet UITextView *textView;
- (void)dismissKeyboard;
@end
Run Code Online (Sandbox Code Playgroud)
对于PWCPageContentViewController.m:
#import "PWCPageContentViewController.h"
@interface PWCPageContentViewController ()
@end
@implementation PWCPageContentViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.textView.delegate = self;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)dismissKeyboard
{
if ([self.textView isFirstResponder]) {
// dismiss the keyboard when hitting save
[self.textView resignFirstResponder];
}
}
@end
Run Code Online (Sandbox Code Playgroud)
这是一个已知问题还是我错过了什么?
解决Swift中的这个问题:
当我使用3个以上时遇到了这个错误UIPageViewController(UIPageViewController例如尝试使用@ Rashad的代码片段4).问题来自缺少和未实现的可选UIPageViewControllerDelegate的方法,这导致UIPageControl疯狂和不稳定.
请找到修复以下错误的特定方法:
/*
Optional UIPageViewControllerDelegate method
Sent when a gesture-initiated transition ends. The 'finished' parameter indicates whether
the animation finished, while the 'completed' parameter indicates whether the transition completed or bailed out (if the user let go early).
*/
func pageViewController(pageViewController: UIPageViewController,
didFinishAnimating finished: Bool,
previousViewControllers: [AnyObject],
transitionCompleted completed: Bool)
{
// Turn is either finished or aborted
if (completed && finished) {
let currentDisplayedViewController = self.pageViewController!.viewControllers[0] as! ContentViewController
self.pageControl.currentPage = currentDisplayedViewController.index
}
}
Run Code Online (Sandbox Code Playgroud)
如果您想获得完整的工作项目,请在下面找到Github链接:
UIPageViewController使用以下方法来获取后视图控制器和前视图控制器。
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController;
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController;
Run Code Online (Sandbox Code Playgroud)
虽然很奇怪,但这是一个已知的问题。每次它调用Before和After方法来获取VC。如果没有下一个 VC,则返回nil;如果没有前一个 VC,则datasourceDelegate返回 nil,否则返回 VC 的索引。
在 中UIPageViewControllerDelegate,有一个名为 的函数:
- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers;
Run Code Online (Sandbox Code Playgroud)
看看这个,它可能有助于从pendingViewControllers数组中获取当前或下一个/上一个视图控制器。
希望这可以帮助.. :)
| 归档时间: |
|
| 查看次数: |
5689 次 |
| 最近记录: |