- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我遇到了很多人以前在这里遇到过的问题,但是随着新的 iOS 版本的出现和 API 的变化,它的解决方案会随着时间的推移而发生变化。以前的解决方案都不适用于我目前的设置 - XCode 4.2.1、iPhone 模拟器 5.0 或真正的 iPhone 5.0,应用程序以 iOS5 为目标,使用 ARC 和 Storyboard。
我有一个经典的选项卡式应用程序 - 即 UITabBarController,其中有 4 个选项卡......忽略第 2 到第 4 个选项卡......第一个选项卡托管一个 UINavigationController,其 Root View Controller 是一个 UITableViewController。现在我将 1 CustomUIViewController 插入堆栈。
整个设置在 Storyboard 中可视化设计,推送由 segue 完成。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
self.hidesBottomBarWhenPushed = YES;
}
这有效地隐藏了标签栏,就像 iPod 应用程序在 iPhone 中所做的一样。
但是当我从堆栈中弹出 CustomUIViewController 时,TabBar 不会返回。我把
self.hidesBottomBarWhenPushed = NO;
到所有可能和不可能的地方,但没有运气。
如何恢复我的 TabBar?
最佳答案
这是一个总结性的答案,旨在为 future 的读者提供一个清晰可读的解决方案,并明确地表述一些相关问题。
问题的解决方法如下
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[segue.destinationViewController setHidesBottomBarWhenPushed:YES];
}
问题/困惑在于,在 prepareForSegue: 方法中,可以在源 View Controller (我们现在看到的那个)或目标 View Controller 上设置属性“hidesBottomBarWhenPushed”(被插入堆栈的那个)。无论哪种方式设置,您都可以解决问题的前半部分。你的 TabBar 被隐藏了。这就是为什么我以前的代码中的“隐藏”部分起作用的原因,我在源 View Controller 上设置属性。在我的代码中
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
self.hidesBottomBarWhenPushed = YES;
}
这里,“self”指向源 View Controller ,而不是目标 View Controller 。所以我们必须将其设置为目标 View Controller ...
最后一个问题 .. 这个带点符号的代码不起作用>
segue.destinationViewController.setHidesBottomBarWhenPushed = YES;
你不能像这样调用setter方法
[segue.destinationViewController setHidesBottomBarWhenPushed:YES];
解决方案完全符合 Apple 规范,即“底部栏保持隐藏状态,直到 View Controller (将隐藏属性设置为 YES) 从堆栈中弹出。”
最后,不要忘记将 hide 属性的设置缩小到特定的 segue
-(void)prepareForSegue:(UIStoryboardSegue *)segue
sender:(id)sender
{
if ([segue.identifier isEqualToString:@"SegueIdentifier"])
{
[segue.destinationViewController setHidesBottomBarWhenPushed:YES];
}
}
我将奖励分给两个用户(赏金给 Ash Furrow,接受的解决方案给 Eric Lars0n,这是我在阅读关于赏金和接受的规则后最接近的)他们都帮助我解决了这个问题,+ 一个小在他们受人尊敬的主题中评论原因。
关于objective-c - TabBar躲起来了,怎么问都不想回来……,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8532743/
我的应用程序中有一个 IList 站点,并且站点有大量属性。 我想将此列表转换为 JSON,以便在类似于此的下拉列表中使用 var sites = SiteRepository.FindAll
我正在将一些代码从 bluebird 切换到原生 Promises,并且我对原生 promises 吞下错误这一事实感到相当恼火,即使没有定义 .catch() 也是如此。它使调试变得不可能,除非您在
在同步访问共享资源时,是否有理由不使用读/写锁而不是普通的互斥锁(基本上只是写锁),除了它具有比我可能需要的更多功能的哲学原因? 换句话说,如果我只是默认使用读/写锁作为我首选的同步结构,我是不是在踢
我刚进入这个元素,代码已经写好了,但我们发现了一个问题。当您单击菜单中的任何位置时,它会变成金色,您看不到菜单该部分中的任何链接。您可以再次单击它,它将返回到正常状态。这只发生在 Internet E
这是一个简单的类和简单的测试函数: #include #include namespace { using namespace std; } class NameStream {
我有一个 std::vector其中 Foo是一个包含 Foo( Foo&& ) noexcept 的类. 向容器中添加对象完美无缺,但是使用 std::vector::erase( iterator
我正在通过这段代码使用各种浏览器尝试 localStorage 和 JSON: function getStorage() { stored = JSON.pa
您可能认为此问题与 Running two projects at once in Visual Studio 完全相同.不完全是,恰恰相反。 我有一个带有两个 MVC3 项目的 VS 2010 解决
我正在制作一个网站:http://arc-angyal.hu/ 我的第一个问题是,我无法让左侧的红色 div 足够高以填充页眉和页脚之间的空间。它位于标题之后和导航之前。我已经设置: html, bo
根据 This Question ,我正在使用线程来终止用户输入的函数。我的代码看起来像: bool stopper = false; thread stopThread(userStop, &sto
我是一名优秀的程序员,十分优秀!