草庐IT

ios - 了解 iOS 中的 View Controller 嵌套

coder 2023-07-26 原文

在过去的几天里,我一直在绞尽脑汁试图理解这个看似基本的 iOS 开发概念:

  • 如果我想在同一个“屏幕”中显示和使用两个或更多 View Controller ,是这样的:

    1. 根据 Apple 的“每屏内容一个 VC”,不建议
    2. 通过代码添加 VC 完全可能
    3. 还没有完成。相反,使用一个 VC 并简单地添加代码来模仿您想要的 View Controller 的功能。

让我改一下:

如果我想在 iPad 应用程序中有一个 UIView (A) 占据屏幕左侧的大部分,第二个 UIView (B) 占据了屏幕右侧的其余部分,我想向 UIView B 添加一个按钮,单击该按钮时将使用模式转换向上滑动 UITableview 来替换 UIView B,然后这个 UITableview 将像典型的 UITableviewController 一样,当用户从表中选择一个项目时,典型的事件被发送到tableview Controller 推送一组新的项目,这可能吗?

在我看来,如果我已经能够轻松地创建两个单独的 UIViewController,并且在一个 VC 中有一个按钮以模态方式调出第二个 VC,为什么我不能组合此功能以便一个 VC 有两个子 VC,并且那些子 VC 处理它们自己的模态转换。

或者在这种情况下,最好的做法是让一个 VC 处理所有事情,然后在对各种 UI 元素进行各种点击后手动处理幻灯片进/出各种 View 的动画?

如您所知,我认为我已经阅读了太多对类似问题的不同、相互矛盾的回答,以至于我完全搞不清什么是什么了。如果有人理解我的意思并可以提供帮助解释或一些指示,我将不胜感激。

最佳答案

答案取决于您是否需要支持 iOS 4。如果是,答案是:

答案 1 - 除了 Apple 自己的容器 Controller ,特别是 UITabBarController、UINavigationController、UISplitViewController、UIPageViewController 和 UIPopoverController(我错过了什么吗?)没有适当支持的方式在同一屏幕上激活多个 View Controller ,管理 View 的不同部分。 View Controller 方法,如 presentModalViewController 等,都假设有一个“最前面”的 View Controller 拥有整个屏幕,如果您尝试让多个 View Controller 管理 View 的不同部分,那么各种各样的事情都会发生中断,例如在页面转换后转发屏幕旋转事件和调整 View 的大小/位置。

但是如果你只需要支持iOS 5,答案是:

答案 2 - 没问题!只需确保所有子页面 View Controller 都正确连接到管理整个页面的主视图 Controller 即可。这意味着除了 Controller 的 View 是公共(public)父 View 的 subview 之外, Controller 本身应该是公共(public)父 Controller 的子 Controller 。只要 Controller 的 parentViewController 属性都设置正确,您应该能够轻松管理这种复合界面。

不幸的是,Apple 只在 iOS5 中为 childViewControllers 和 parentViewControllers 添加了 public setter。在 iOS4 及更早版本中,您只能使用 Apple 自己的容器 Controller 安排,无法创建自己的(至少,并非没有事件转发问题)。

因此假设您现在需要支持 iOS4,答案 3 似乎是您最好的选择:使用多个 View 但一个 Controller 构建您的界面。不过这还不算太糟糕。您可以创建自定义 View 子类来管理继承人自己的 subview (例如,没有规则规定 tableViewDataSource 或委托(delegate)必须是 UIViewController 子类,或者按钮 IBAction 必须是 View Controller 上的方法而不是另一个 View )。

您实际上会发现,您通常构建到 View Controller 中的大部分功能都可以构建到“智能”容器 View 中,从而允许您将屏幕拆分为多个独立的“ Controller View ”,它们各自管理内容。

唯一棘手的是在一个 View 和下一个 View 之间进行转换之类的操作。为此,您将无法使用标准的 presentModalViewController 或 pushViewController 方法,您必须使用 CATransitions 或 UIView 动画自己制作动画。

关于ios - 了解 iOS 中的 View Controller 嵌套,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9012510/

有关ios - 了解 iOS 中的 View Controller 嵌套的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  3. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  4. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  5. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  6. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  7. ruby - 将散列转换为嵌套散列 - 2

    这道题是thisquestion的逆题.给定一个散列,每个键都有一个数组,例如{[:a,:b,:c]=>1,[:a,:b,:d]=>2,[:a,:e]=>3,[:f]=>4,}将其转换为嵌套哈希的最佳方法是什么{:a=>{:b=>{:c=>1,:d=>2},:e=>3,},:f=>4,} 最佳答案 这是一个迭代的解决方案,递归的解决方案留给读者作为练习:defconvert(h={})ret={}h.eachdo|k,v|node=retk[0..-2].each{|x|node[x]||={};node=node[x]}node[

  8. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  9. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  10. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

随机推荐