作者uranusjr (←这人是超级笨蛋)
看板MacDev
标题Re: [问题] tabBarController 没反应
时间Wed Feb 6 22:39:04 2013
※ 引述《kiii210 (Johnny.T)》之铭言:
: 有点不知道怎麽下标题...这次真的遇到困难了...
: 简单叙述一下问题
: 现有一个UITabBarController,是Initial View Controller,
: 跟它有Relationship的都会有tabBar.
: 原本的tabBar已经被我hidden,改用我自己的UIView来做.
: 假设我现在在FirstViewController,
: 我需要一个功能, 在原本的tabBar(自己的UIView)上面再盖一层UIView过去.
: (没办法在FirstViewController当中addSubView, 因为不管怎样都会被tabBar盖掉)
: 但是问题来了, 在FirstViewController不管怎麽呼叫TabBarController中的method,
: method会有反应(NSLog), 但是执行的动作却都没反应
: ex:
: - (void) hideTabBar
: {
: NSLog(@"YES");
: self.bar.hidden = NO;
: }
: NSLog会有值出来, 代表method有执行到,
: 但是我的bar(UIView)却无法hidden....
: 这是什麽问题勒...~"~
其实你可以把 subview 加到 UITabBar 里, 就不会被盖掉了
回到你的问题
你给的东西实在太少了根本有给等於没给
不过发生这种事情的时候第一个就是要怀疑你的 self.bar 是不是 nil
: 另请问
: MyTabBarController *tab = [self.storyboard instantiateViewControllerWith
: Identifier:@"Bar"];
: [tab showsStatusBar];
: 跟
: MyTabBarController *tab = [[MyTabBarController alloc] init];
: [tab showsStatusBar];
: 这两者都能执行该method, 但有何差异?建议用哪一种呢?
Storyboard 中的 objects 是处於被 archived 的状态
当你呼叫 -instantiateViewControllerWithIdentifier: 时
Storyboard 会呼叫对应的 view controller 的 -initWithCoder: 初始子
这个初始子会连带使得你在 Storyboard 为这个 controller 做的设计被重建
接着呼叫一连串的 callbacks, 包括 -awakeFromNib: 和 -viewDidLoad 等等
另一方面如果你用 alloc init 的话, 被呼叫的当然就是 -init
而且(重点)你「不会」得到这些 callbacks, 也不会得到 Storyboard 中的重建
建议用哪种?那就看你的需求啊
如果你的 view controller 是 self-contained 或是使用独立的 NIB
那当然就是用 alloc init 比较好
而如果你需要(或希望)在 Storyboard 为这个 controller 进行设计
那就是 -instantiateViewControllerWithIdentifier: 比较好
甚至如果你设计的好, 还可以让一个 view controller 同时适用这两种策略
就可以更方便地重用这个 class
--
"问おう、贵方が私のマスターか?"
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.81.146
1F:推 kiii210:感谢大大回复,不好意思这麽晚才回,最近几天都在赶案子 02/14 01:04
2F:→ kiii210:我知道问题叙述得不够清楚, 不过问题已经解决了,m/4 02/14 01:04
3F:→ kiii210:用UIApplication sharedDelegate跟tabController搭配用 02/14 01:04
4F:→ kiii210:storyboard问题也感谢, 没想到这中间还牵扯这麽深.. 02/14 01:05
5F:→ kiii210:我还有得学... 02/14 01:05