我有一个 TabBarController 设置为主 Controller 选项卡,其中的名称是使用界面生成器定义的。现在我想以编程方式更改其名称。
这怎么可能呢?
最佳答案
自从我最初的回答以来,发生了很多事情:Swift 3、Storyboards 等。标题通常是所有 View 共享的标题,可以在属性检查器中设置
此外,为了获得更多控制,您始终可以从设计器 View 中拖动 UITabBarItem 和 UINavigationItem 元素。您必须将它们拖到要显示在选项卡栏/导航 Controller 中的 View 中。基本上,他们将信息存储为“我想像这样显示在标签栏中”。
Hello Scene is getting a TabBarItem added to it, so it can be configured.
这两个元素的行为与通过代码访问 View Controller 的 .tabBarItem 和 .navigationItem 属性完全相同。如果这些属性是相应对象的子对象(nav 有 navItem,tab 有 tabItem),它们将始终存在于代码中,您无需将它们添加到 storyboard/xib 中即可拥有它们。
这最后一件事有点令人困惑,因为在 Storyboard /xib 中,您似乎将它们添加到 View Controller 中,但实际上您只是在说“nib 也会配置这些属性”。
出现在标签栏上的名称来自UIViewController的title属性,
self.title = @"Name me!";
您可以随时更改标题,它应该会更新出现在选项卡栏项目上的文本。但要小心,尽快执行此操作,理想情况下,在正在使用的 init 方法中(或 initWithNibName:bundle:,或 initWithCoder:).
这里的关键是,一旦标签栏出现在屏幕上,就会调用 init 方法,因为它会初始化所有 View Controller 。如果您要在 viewDidLoad 上执行此操作,则只有在您实际选择选项卡时才会被调用,然后是其他调用系列,同样适用于 awakeFromNib、viewWillAppear :, viewDidAppear: 等
在 UIViewController 上设置标题的想法是为了保持一致。如果您在 UINavigationController 上显示 viewController,顶部的导航栏应该使用 title 属性,就像使用 back 时一样。 UITabBarController 也遵循相同的 title 属性并相应地进行更改。
就可重用性而言,您应该仅从 UIViewController 子类内部设置标题。
使用 nib 还是 Storyboard?如果你有一个 UIViewController,你可以在属性检查器中直接给它命名(或者 ⌥⌘4)
不幸的是,如果文件所有者是 UIViewController 子类,那么您将无法通过这种方式访问它,原因很简单,XCode 将文件所有者注册为“外部对象”,并且没有为其显示配置面板。 :(
但有时,您只是想让它们以不同的方式命名
// Modify the display title on the tab bar
self.tabBarItem.title = @"World";
// Modify the display title on the navigation bar
self.navigationItem.title = @"Hello World";
每个 UIViewController 都应该处理他自己的名字,如果你想从外部强制它怎么办(因此,完全违反了我所说的关于可重用性的原始内容)?
// Rename the other guy's .title property
[[self.tabBarController.viewControllers objectAtIndex:<#Index#>] setTitle:@"Hello World"];
// Or do as before, and rename the other guy's tab bar
[(UITabBarItem*)[self.tabBarController.tabBar.items objectAtIndex:<#index#>] setTitle:@"Hello World"];
你也可以用导航项来做,但这需要更多的体操,我无法接受。
关于ios - 在 uitabbarcontroller 中更改选项卡名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7250413/
如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设
这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe
这里有一个很好的答案解释了如何在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返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
假设我有一个FireNinja我的数据库中的对象,使用单表继承存储。后来才知道他真的是WaterNinja.将他更改为不同的子类的最干净的方法是什么?更好的是,我很想创建一个新的WaterNinja对象并替换旧的FireNinja在数据库中,保留ID。编辑我知道如何创建新的WaterNinja来self现有FireNinja的对象,我也知道我可以删除旧的并保存新的。我想做的是改变现有项目的类别。我是通过创建一个新对象并执行一些ActiveRecord魔法来替换行,还是通过对对象本身做一些疯狂的事情,或者甚至通过删除它并使用相同的ID重新插入来做到这一点,这是问题的一部分。
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的