草庐IT

ios - 在 uitabbarcontroller 中更改选项卡名称

coder 2023-07-24 原文

我有一个 TabBarController 设置为主 Controller 选项卡,其中的名称是使用界面生成器定义的。现在我想以编程方式更改其名称。

这怎么可能呢?

最佳答案

更新到 XCode 8

自从我最初的回答以来,发生了很多事情:Swift 3、Storyboards 等。标题通常是所有 View 共享的标题,可以在属性检查器中设置

此外,为了获得更多控制,您始终可以从设计器 View 中拖动 UITabBarItemUINavigationItem 元素。您必须将它们拖到要显示在选项卡栏/导航 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 也会配置这些属性”。

原始答案

出现在标签栏上的名称来自UIViewControllertitle属性,

self.title = @"Name me!";

您可以随时更改标题,它应该会更新出现在选项卡栏项目上的文本。但要小心,尽快执行此操作,理想情况下,在正在使用的 init 方法中(或 initWithNibName:bundle:,或 initWithCoder:).

这里的关键是,一旦标签栏出现在屏幕上,就会调用 init 方法,因为它会初始化所有 View Controller 。如果您要在 viewDidLoad 上执行此操作,则只有在您实际选择选项卡时才会被调用,然后是其他调用系列,同样适用于 awakeFromNibviewWillAppear :, viewDidAppear:

UIViewController 上设置标题的想法是为了保持一致。如果您在 UINavigationController 上显示 viewController,顶部的导航栏应该使用 title 属性,就像使用 back 时一样。 UITabBarController 也遵循相同的 title 属性并相应地进行更改。

就可重用性而言,您应该仅从 UIViewController 子类内部设置标题。

Nib 之道

使用 nib 还是 Storyboard?如果你有一个 UIViewController,你可以在属性检查器中直接给它命名(或者 4)

不幸的是,如果文件所有者是 UIViewController 子类,那么您将无法通过这种方式访问​​它,原因很简单,XCode 将文件所有者注册为“外部对象”,并且没有为其显示配置面板。 :(

多个标题,相同的 View Controller

但有时,您只是想让它们以不同的方式命名

// 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/

有关ios - 在 uitabbarcontroller 中更改选项卡名称的更多相关文章

  1. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

    如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

  2. ruby - 默认情况下使选项为 false - 2

    这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb

  3. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的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服务器更新战俘

  4. ruby - Capistrano 3 在任务中更改 ssh_options - 2

    我尝试使用不同的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

  5. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在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返回它复制的字节数,但是当我还没有下

  6. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  7. ruby - 更改 ActiveRecord 中对象的类 - 2

    假设我有一个FireNinja我的数据库中的对象,使用单表继承存储。后来才知道他真的是WaterNinja.将他更改为不同的子类的最干净的方法是什么?更好的是,我很想创建一个新的WaterNinja对象并替换旧的FireNinja在数据库中,保留ID。编辑我知道如何创建新的WaterNinja来self现有FireNinja的对象,我也知道我可以删除旧的并保存新的。我想做的是改变现有项目的类别。我是通过创建一个新对象并执行一些ActiveRecord魔法来替换行,还是通过对对象本身做一些疯狂的事情,或者甚至通过删除它并使用相同的ID重新插入来做到这一点,这是问题的一部分。

  8. ruby-on-rails - 使用 config.threadsafe 时从 lib/加载模块/类的正确方法是什么!选项? - 2

    我一直致力于让我们的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

  9. ruby - 在 Ruby 中按名称传递函数 - 2

    如何在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中能不能做到类似的简洁?我可以只

  10. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

随机推荐