标签: uipageviewcontroller

UIPageViewController内存泄漏

似乎UIPageViewController永远保存着初始内容视图控制器.例如:

DataViewController *startingViewController = [self.modelController viewControllerAtIndex:0 storyboard:self.storyboard];
NSArray *viewControllers = @[startingViewController];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL];
self.pageViewController.dataSource = self.modelController;
Run Code Online (Sandbox Code Playgroud)

startingViewController永远不会释放,直到pageViewController它本身释放.

要重现此错误,只需使用基于页面的应用程序模板在XCode中创建一个新项目.并在DataViewController.m中添加3行代码

@property NSInteger debugIndex; // file scope
NSLog(@"DataViewController[%d] created", self.debugIndex); // in viewDidLoad
NSLog(@"DataViewController[%d] dealloc", self.debugIndex); // in dealloc
Run Code Online (Sandbox Code Playgroud)

当您以垂直方向滚动演示应用程序时,您将获得如下日志:

DataViewController[0] created  
DataViewController[1] created  
DataViewController[2] created  
DataViewController[1] dealloc  
DataViewController[3] created  
DataViewController[2] dealloc  
DataViewController[4] created  
DataViewController[3] dealloc  
DataViewController[5] created  
DataViewController[4] dealloc  
DataViewController[6] created  
DataViewController[5] dealloc  
Run Code Online (Sandbox Code Playgroud)

DataViewController [0]永远不会被释放.

有关于此的任何想法?谢谢!

memory-leaks uipageviewcontroller

9
推荐指数
2
解决办法
3383
查看次数

滚动应用程序:UIPageViewController vs UIScrollView

我正在开发一个应用程序,其中有几个屏幕,每个屏幕具有相同的布局,只传入不同的数据,然后我希望用户能够从一个屏幕滑动到下一个屏幕.

到目前为止,我UIPageViewController使用过渡样式使用项目模板UIPageViewControllerTransitionStyleScroll.到目前为止我所做的工作还可以,虽然资源密集,因为每次我刷到一个新页面时它都会实例化一个新的视图控制器,但我正在努力解决这个问题.

我关心的事情是,它不是严格的iBooks意义上的网页应用程序,这样即使我能够使它看起来像一个滚动的应用程序,使用的过渡样式设置,我不知道是否有一个人之所以似乎只对书籍类型的应用程序使用此模板,除非我弄错了

似乎还有一种使用UIScrollViewPageControl执行类似功能的替代方法

http://developer.apple.com/library/ios/#samplecode/PageControl/Introduction/Intro.html

我不确定哪种方法可以更好地解决我想要解决的问题,所以我正在寻找一些反馈.每个页面都需要是视图控制器的单独实例,因为每个页面上都有几个要显示的元素.

uiscrollview ios uipageviewcontroller

9
推荐指数
1
解决办法
4848
查看次数

UITextField在视图出现后丢失firstResponder

我有一个UIPageViewController.一个页面只有一个按钮,另一个页面有UITextField一个按钮.当页面滚动到带有字段的视图时,我想要它becomeFirstResponder并打开键盘.这是发生的事情:

  • 我调用了[self.locationQuery becomeFirstResponder]ViewController的viewDidAppear方法.但它永远不会打开键盘.

  • 我做同样的事情viewWillAppear,它看似简短,但后来很快就被解雇了.

  • 如果我在带有文本字段的页面上,并将页面拉到中途并放开(不更改页面),则self.locationQuery获得焦点就好了.

似乎其他东西正在从字段中获取firstResponder状态,但我不知道什么是什么,以及为什么它只会在页面发生变化时发生(而不是在页面转向失败后显示).有任何想法吗?

更新

我创建了一种方法来抓取视图以查看是否有任何其他视图确实采用firstResponder(来自此问题的答案:在不使用私有API的情况下获取当前的第一响应者).结果:

  • 当我明确地将第一响应者提供给文本字段时,该方法报告它具有第一响应者状态.

  • 当我不这样做时,它会返回null.

现在我更加困惑.

objective-c first-responder uipageviewcontroller

9
推荐指数
1
解决办法
802
查看次数

如何使用自动布局在UIPageViewController中定位子视图?

我有一个UIPageViewController子类,并在其viewDidLoad我想将添加UILabel到它self.view.如果我使用框架设置其位置,这可以正常工作,但如果我尝试使用自动布局定位它,我得到:

*断言失败 - [_ UIPageViewControllerContentView layoutSublayersOfLayer:],/ SourceCache/UIKit_Sim/UIKit-2935.58/UIView.m:8742

我该怎么定位这个UILabel出现在UIPageViewController

objective-c uiview ios uipageviewcontroller autolayout

9
推荐指数
1
解决办法
1898
查看次数

如何让uipageviewcontroller进入圈子

我有一个显示不同页面的UIPageViewController.当前的行为是当我到达最后一页时它停止滚动.我现在想要实现的是,当在最后一页并向右滚动时,它会转到第一页.在第一页时,向左滚动时转到最后一页.所以基本上让PageViewController以圆圈形式显示页面.我的第一种方法在有多个页面或从一个页面开始时效果很好:

- (UIViewController*) pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(TMCollectionViewController *)viewController
{

    if((viewController.pageIndex) >= 1)
    {
        return _viewControllers[viewController.pageIndex - 1];
    }
    else
    {
        if ([_viewControllers count] == 1) {
            return nil;
        }
        return [_viewControllers objectAtIndex:[_viewControllers count]-1];
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我删除页面以便只剩下一个页面时,它仍然会记住页面之前或之后,并相应地显示它.即使数组中只剩下一页.任何帮助都非常感谢.

objective-c ios uipageviewcontroller swift

9
推荐指数
1
解决办法
5200
查看次数

UIPageViewController NSInternalInconsistencyException

我正在开发一个UIPageViewController有两页的简单.每个页面都是从不同的页面加载ViewController其特定xib文件,名为PViewControllerTViewController.

对于PViewController,有三种不同的意见,我们姑且称之为,,和Ç.当应用程序启动时,PViewController显示成功,我可以向左滑动查看TViewController,也没有问题.但是,当我进入PViewController并作为对事件的响应时,我将当前视图A更改为另一个视图B,然后向左滑动转到TViewController,我收到以下异常,应用程序终止:

*** Assertion failure in -[_UIQueuingScrollView _setWrappedViewAtIndex:withView:], /SourceCache/UIKit_Sim/UIKit-2935.137/_UIQueuingScrollView.m:338
2014-07-10 13:57:23.389 ***** [2012:60b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unexpected subviews'
*** First throw call stack:
(
    0   CoreFoundation                      0x01fde1e4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x01c418e5 objc_exception_throw + 44
    2   CoreFoundation                      0x01fde048 +[NSException raise:format:arguments:] + 136
    3 …
Run Code Online (Sandbox Code Playgroud)

exception objective-c ios uipageviewcontroller

9
推荐指数
1
解决办法
3413
查看次数

UIPageViewController和UIPageControl透明背景色 - iOS

当应用程序第一次启动并使用时,我正在制作教程UIPageViewController.一切都很好,但背景颜色UIPageViewController不透明.它总是黑色的,如下所示:

在此输入图像描述 在此输入图像描述

这是我添加的方式UIPageViewController(在tabbar控制器中)

.h文件:

@interface CHMainTabViewController : UITabBarController <UIPageViewControllerDataSource>

@property (strong, nonatomic) UIPageViewController *pageViewController;
@end
Run Code Online (Sandbox Code Playgroud)

.m文件(in viewDidLoad):

// Create page view controller
self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
self.pageViewController.dataSource = self;
self.pageViewController.view.backgroundColor = [UIColor clearColor];
TutorialViewController *startingViewController = [self viewControllerAtIndex:0];

                NSArray *viewControllers = @[startingViewController];

                [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
[self presentViewController:_pageViewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

在我的AppDelegate.m中,我还设置了UIPageControl背景颜色以清除:

UIPageControl *pageControl = [UIPageControl appearance];
pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
pageControl.backgroundColor = [UIColor clearColor];
[pageControl setOpaque:NO];
self.window.backgroundColor …
Run Code Online (Sandbox Code Playgroud)

objective-c uipagecontrol ios uipageviewcontroller uibackgroundcolor

9
推荐指数
1
解决办法
5315
查看次数

在pageViewController内的tableView上滑动以删除

我有一个tableView内部,pageViewController当在一个单元格上滑动以显示删除单元格的选项时,只有在某些情况下才能识别出手势,比如说你快速而且积极地滑动.

我想这会发生,因为它不确定滑动手势是用于pageView还是用于tableView.有没有办法专门确定滑动手势发生的位置,以便能够顺利显示删除按钮?

tableview tableviewcell ios uipageviewcontroller swift

9
推荐指数
2
解决办法
1969
查看次数

如何将阴影背景白色更改为其他颜色

我正在尝试UIPageViewController在进行翻转动画时改变阴影颜色.但它总是只显示白色.如何将翻转背景颜色白色的颜色更改为其他颜色(黑色或sephia).iBook也在做同样的事情.

我提到下面的图像有白色bg,颜色我会改变.

截图: 在此输入图像描述

ios uipageviewcontroller

8
推荐指数
2
解决办法
2964
查看次数

UIPageViewController:子控制器在滚动期间忽略状态栏高度

我遇到了一些问题UIPageViewController.如果我滚动到了新的一页,新的视图控制器是落后的状态栏,而我在滚动.滚动后,视图控制器将自身置于状态栏下方.

我正在使用Storyboard(Universal).UIPageViewController有属性Extend Edges: Under Top Bars.我错过了什么?

在此输入图像描述

  • 设置automaticallyAdjustsScrollViewInsets为false不起作用
  • 使用edgesForExtendedLayout = UIRectEdge.None也没有用
  • 在这里找到一些开放的问题,但没有答案(链接)

UPDATE

跳跃的另一个原因是来自'Constraints'的'边缘'(在这里找到).如果使用约束,请确保取消选中边距(右对话框).您可以稍后在"实用程序"中将其删除(左侧对话框).检查两个连接的视图!

在此输入图像描述

statusbar ios uipageviewcontroller

8
推荐指数
1
解决办法
1656
查看次数