作者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