在现有应用程序中将UIPageViewController与UITableViewController和& UINavigationController的

时间:2014-06-16 20:19:56

标签: ios objective-c storyboard uipageviewcontroller

我遇到了将UIPageViewController集成到现有应用中的问题。我有一个带有项目列表的简单UITableViewController。点击一个会显示详细视图。我只想让用户从详细视图滑动到详细视图(很常见)。我按照这个开始:http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/

使用tableview,我是否只需将一个单元格连接到PageViewController并使用我现有的详细信息VC作为“内容”或“数据”视图控制器?

更新1: 我已经掌握了基础知识,我可以在详细信息视图中查看我的内容并在项目之间滑动。除了数据传递之外的所有东西都不起作用。最大的问题是导航控制器。当我显示我的详细视图时,我在技术上看到一个带有后退按钮的导航栏,但它没有我在v​​iewdidload中添加的任何按钮(使用[self.navigationController.navigationBar addSubview:addButton])。我添加的barbuttonitem也没有显示(我读过关于传递navitem作为属性,但我还有其他问题)。内容在导航栏下面(可以通过框架调整来固定,但它只是让我觉得有些不对劲)。在我滑动一次后,自定义按钮显示(而不是barbuttonitem),但按下它们会给我无法识别的选择器错误,告诉我自我的初始目标(detailVC)消失了。为什么这会被释放?为什么按钮显示不在第一次加载(viewdidload被调用)?看起来我似乎错过了将TableVC连接到PageVC和DetailVC以及导航控制器和条形图传播的部分。它只是不认为导航控制器似乎在那里。

当前设置:使用初始VC作为导航控制器进行故事板处理。一切正常。我现在把一个单元格连接到一个新的视图控制器(采用UIPageViewControllerDataSource)。然后在它的viewdidload中我有:

// Create page view controller
self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
self.summaryPageViewController.dataSource = self;

myContentViewController *startingViewController = [self viewControllerAtIndex:self.rowTapped];
NSArray *viewControllers = @[startingViewController];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

现在我有以下内容,我在苹果的例子中看到了

[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];

从表格到视图控制器的segue保持导航(推送segue),但在看起来之后我就失去了它。我尝试添加[self.navigationController pushViewController:self.summaryPageViewController animated:NO];,但这给了我“嵌套推送动画可能导致导航栏损坏”错误。就像我说的那样,这实现了让我在视图之间滑动并拥有不同数据的基础知识,但很明显缺少某些东西。我已经在各地搜索过,但找不到我所缺少的东西,使得pageviewcontroller和导航控制器一起玩得很好。非常感谢您的帮助,并让我知道我还能提供哪些帮助。

SORTA SOLUTION: 获得唯一答案的赏金。它并不是我需要的所有东西,但标记是有用的,主要的是传递一个navItem属性并添加按钮。注意viewdidload并在“内容”视图控制器上显示方法,因为页面视图控制器不会按照您用来加载上一个和下一个控制器的顺序调用事物。

1 个答案:

答案 0 :(得分:3)

是的,听起来不错。你试过吗?问题出在哪里?

编辑以回答您的修改;)

您可以通过这种方式在表视图选择推送的ViewController的viewDidLoad中添加UIBarButtonItems:

一件物品:

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithTitle:@"Test" style:UIBarButtonItemStylePlain target:self action:@selector(barButtonItemTapped:)];    
self.navigationItem.rightBarButtonItem = barButton;

两项:

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithTitle:@"Test" style:UIBarButtonItemStylePlain target:self action:@selector(barButtonItemTapped:)];
UIBarButtonItem *barButton2 = [[UIBarButtonItem alloc] initWithTitle:@"Test" style:UIBarButtonItemStylePlain target:self action:@selector(barButtonItemTapped:)];
self.navigationItem.rightBarButtonItems = @[barButton, barButton2];

使用leftBarButtonItemleftBarButtonItems将按钮放在左侧。

实现此方法(或上面称为选择器的任何方法),以便在点击时使按钮工作:

- (void)barButtonItemTapped:(id)sender
{
    NSLog(@"Hello");
}

我在带有故事板的测试项目中试过这个,控制器层次结构是这样的:

UINavigationController -> UITableViewController -> UIViewController (with UIPageViewController as childViewController) -> UIViewController as view controllers inside the UIPageViewController

从iOS 7开始,您的内容显示在状态栏下方是正常的。如果您不想要,则需要调整视图框。 SO上有很多关于这方面的问题。

希望有所帮助。