我正在尝试了解 iPhone 版 Twitter 中的导航样式是如何实现的。
当您点击时间线中的一条推文时,(自定义)标签栏在从时间线到详细 View 的过渡期间保持原位。这表明选项卡栏是“主”UIViewController 的 subview ,它包含一个包含 4 个 UINavigationControllers 的数组,每个选项卡一个。按下选项卡时,主 UIViewController 从其 View 中删除当前可见的 UINavigationController 并将新的添加为 subview 。在这种方法中,选项卡栏不是任何导航堆栈的一部分,因此它在每次转换期间都保持在原位。
但是,当您在详细 View 中点击 URL 时,标签栏会移出屏幕并出现一个新的工具栏。这与上述理论相矛盾。
Tweetbot 使用与官方 Twitter 应用完全相反的导航风格。如果您在 Tweetbot 的时间轴中点击一条推文,标签栏会移出屏幕。标签栏在转换过程中永远不会停留在原地。他们可能使用一个 UINavigationController,主 UIViewController + 标签栏作为 rootviewcontroller。我假设当用户点击一条推文时,时间轴通过委托(delegate)或类似的方式在主 UIViewController 上调用 [self.navigationController pushViewController:]。
事实上,iPhone 版 Twitter 混合了第一个理论和 Tweetbot 导航风格背后的理论。我怎样才能实现官方 Twitter 应用程序的功能?
最佳答案
这可能是一个过于简化的描述,很多都是靠内存,但我认为这应该能让你上路......
Root View Controller 主要是一个从头开始实现的标签栏 Controller 。在有简单的 iOS API 之前,它最初用于自定义标签栏样式。但是,通过继续拥有代码,添加工具栏/标签栏交换并不难。
Root View Controller 同时拥有标签栏 View 和工具栏 View 。 Root View Controller 是每个选项卡的导航 Controller 的委托(delegate);当导航 Controller 推送新的 View Controller 时,主视图 Controller 检查它是否有 toolbarItems,并管理交换。
出于可用性原因,用工具栏替换标签栏通常不是一个好主意。标签栏为屏幕内容提供基础;想想浏览器的标签。选项卡栏项目还允许您在选项卡处于事件状态时通过点击它跳转到层次结构中的 Root View Controller 。 (这不是最容易发现的功能,但至少是系统范围内的标准功能。)
这不是硬性规定。在导航层次结构中替换“叶子”的标签栏是很常见的;想想 Music.app 和 Photos.app。除非您有强有力的令人信服的理由,否则请避免使用它。
关于iphone - 类似 iPhone 版 Twitter 的导航风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12125130/
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
Ruby是否有逐步调试器,类似于Perl的“perl-d”? 最佳答案 ruby-debug(对于ruby1.8),debugger(对于ruby1.9),byebug(对于ruby2.0)以及trepanning系列都有一个-x或--trace选项。在调试器内部,命令setlinetrace将打开或关闭线路跟踪。这是themanualforruby-debug原来的答案已经修改,因为数据噪声文章的链接,唉,不再有效了。还添加了ruby-debug的后继者 关于ruby-Ruby
假设您在Ruby中执行此操作:ar=[1,2]x,y=ar然后,x==1和y==2。是否有一种方法可以在我自己的类中定义,从而产生相同的效果?例如rb=AllYourCode.newx,y=rb到目前为止,对于这样的赋值,我所能做的就是使x==rb和y=nil。Python有这样一个特性:>>>classFoo:...def__iter__(self):...returniter([1,2])...>>>x,y=Foo()>>>x1>>>y2 最佳答案 是的。定义#to_ary。这将使您的对象被视为要分配的数组。irb>o=Obje
我使用Jekyll运行博客,并认为我会解决RedcarpetMarkdown解释器,因为它是developedandusedbyGitHub.好吧,我只是碰巧遇到了一个错误,去检查问题,然后foundthis.Maintainersays,"Asyouprobablyhavenoticed(harharharhar)Idon'thavetimetomaintainRedcarpetanymore.It'snotapriorityforme(IfindMarkdownthoroughlyboring)andit'snotapriorityforGitHub,becausewenolong
查看Ruby代码,它具有以下proc_arity:staticVALUEproc_arity(VALUEself){intarity=rb_proc_arity(self);returnINT2FIX(arity);}更多的是C编码风格问题,但为什么staticVALUE在单独的一行而不是像这样的:staticVALUEproc_arity(VALUEself) 最佳答案 它来自UNIX世界,因为它有助于轻松grep函数的定义:$grep-n'^proc_arity'*.c或使用vim:/^proc_arity
关于如何使用git设置类似Dropbox的服务,您有什么建议吗?您认为git是解决此问题的合适工具吗?我在考虑使用git+rush解决方案,你觉得怎么样? 最佳答案 检查这个开源项目:https://github.com/hbons/SparkleShare来自项目的自述文件:Howdoesitwork?SparkleSharecreatesaspecialfolderonyourcomputer.Youcanaddremotelyhostedfolders(or"projects")tothisfolder.Theseprojec
我在Ruby中遇到了一个有趣的表达式:a||="new"表示如果没有定义a,则将"new"值赋给a;否则,a将保持原样。在进行一些数据库查询时很有用。如果设置了该值,我不想触发另一个数据库查询。所以我在Python中尝试了类似的思路:a=aifaisnotNoneelse"new"失败了。我认为这是因为如果未定义a,则无法在Python中执行“a=a”。所以我能得出的解决方案是检查locals()和globals(),或者使用try...except表达式:myVar=myVarif'myVar'inlocals()and'myVar'inglobals()else"new"或try:
这是我发现自己偶尔想做的事情。假设我有一个参数列表。在Lisp中,我可以像这样`(imaginary-function,@args)为了调用将数组从一个元素转换为正确数量的参数的函数。Ruby中是否有类似的功能?或者我只是在这里使用了一个完全错误的成语? 最佳答案 是的!它被称为splat运算符。a=[1,44]p(*a) 关于Ruby:如何将数组拼接成Lisp风格的列表?,我们在StackOverflow上找到一个类似的问题: https://stackov
我正在为我的用户实现一些rubyonrails代码推特内容。我正在创建正确的oauth链接...类似http://twitter.com/oauth/authorize?oauth_token=y2RkuftYAEkbEuIF7zKMuzWN30O2XxM8U9j0egtzKv但在我的测试帐户授予对twitter的访问权限后,它会弹出一个页面,上面写着“您已成功授予对.我不知道用户应该在哪里输入此PIN以及他们为什么必须这样做。我认为这不是必要的步骤。Twitter应该将用户重定向到我在应用程序设置中提供的回调URL。有谁知道为什么会这样?更新我找到了thisarticle声明我需
当我尝试启动sinatra时,出现以下错误/var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:1488:instart_server':undefinedmethodrun'forHTTP:模块(NoMethodError)require'sinatra/base'require_relative"twt.rb"classSinatraApp在“twt.rb”中我需要Twitter(5.7.1)require'twitter'classTwitattr_accessor:clientdefinitialize(consu