我在将 UIPageViewController 集成到我现有的应用程序中时遇到问题。我有一个带有项目列表的简单 UITableViewController。点击一个会弹出详细 View 。我只想让用户从详细 View 滑动到详细 View (很常见)。我按照这个开始:http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/ .
使用 tableview,我是否可以简单地将一个单元连接到 PageViewController 并使用我现有的详细信息 VC 作为“内容”或“数据” View Controller ?
更新 1: 我已经掌握了基础知识,我可以在详细信息 View 中查看我的内容并在项目之间滑动。但是,除了数据传递之外的所有内容都不起作用。最大的问题是导航 Controller 。当我看到详细 View 时,从技术上讲,我看到了一个带后退按钮的导航栏,但它没有我在 viewdidload 中添加的任何按钮(使用 [self.navigationController.navigationBar addSubview:addButton])。我添加的 barbuttonitem 也没有显示(我读过有关将 navitem 作为属性传递的信息,但我仍然存在其他问题)。内容位于导航栏下方(可通过调整框架来修复,但它只是让我觉得有些地方不对)。在我滑动一次后,显示自定义按钮(不是 barbuttonitem),但按下它们会出现无法识别的选择器错误,告诉我初始目标 self(detailVC)已经消失。为什么这会被释放?为什么按钮在第一次加载时不显示(调用 viewdidload)?似乎我缺少将 TableVC 连接到 PageVC 到 DetailVC 并让导航 Controller 和栏传播通过的部分。它只是不认为导航 Controller 在那里。
当前设置: Storyboard使用初始 VC 作为导航 Controller 。一切正常。我现在使用了一个单元格并连接到一个新的 View Controller (采用 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];
从表到 View Controller 的 segue 保持导航(推送 segue),但在那之后我似乎失去了它。我尝试添加 [self.navigationController pushViewController:self.summaryPageViewController animated:NO]; 但这给了我“嵌套推送动画可能导致导航栏损坏”错误。就像我说的,这完成了让我在 View 之间滑动并显示不同数据的基础知识,但很明显缺少某些东西。我到处搜索,但找不到让 pageviewcontroller 和 nav controller 一起玩得很好的东西。非常感谢您的帮助,让我知道我还能提供什么帮助。
排序解决方案: 奖励唯一答案的赏金。这不是我需要的一切,但 mark 很有帮助,主要是传递 navItem 属性并添加按钮,以便。请小心“内容” View Controller 上的 viewdidload 和 appear 方法,因为它们的页面 View Controller 不会按照您习惯的顺序调用内容,因为它会加载上一个和下一个 Controller 。
最佳答案
是的,听起来不错。你试过了吗?问题出在哪里?
编辑以回答您的编辑;)
您可以通过这种方式在 TableView 选择推送的 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];
使用 leftBarButtonItem 或 leftBarButtonItems 将按钮放在左侧。
实现此方法(或您在上面调用的选择器的任何名称)以使按钮在点击时起作用:
- (void)barButtonItemTapped:(id)sender
{
NSLog(@"Hello");
}
我在一个带有 Storyboard的测试项目中尝试过这个, Controller 层次结构是这样的:
UINavigationController -> UITableViewController -> UIViewController (with UIPageViewController as childViewController) -> UIViewController as view controllers inside the UIPageViewController
从 iOS 7 开始,您的内容显示在状态栏下方是正常的。如果你不想要,你需要调整你的 View 框架。 SO 上有很多关于此的问题。
希望对您有所帮助。
关于ios - 将 UIPageViewController 与 UITableViewController 和 UINavigationController 集成到现有应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24251546/
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我一直很高兴地使用DelayedJob习惯用法:foo.send_later(:bar)这会调用DelayedJob进程中对象foo的方法bar。我一直在使用DaemonSpawn在我的服务器上启动DelayedJob进程。但是...如果foo抛出异常,Hoptoad不会捕获它。这是任何这些包中的错误...还是我需要更改某些配置...或者我是否需要在DS或DJ中插入一些异常处理来调用Hoptoad通知程序?回应下面的第一条评论。classDelayedJobWorker 最佳答案 尝试monkeypatchingDelayed::W
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在