看板 MacDev 關於我們 聯絡資訊
※ 引述《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
kiii210:感謝大大回復,不好意思這麼晚才回,最近幾天都在趕案子 02/14 01:04
kiii210:我知道問題敘述得不夠清楚, 不過問題已經解決了,m/4 02/14 01:04
kiii210:用UIApplication sharedDelegate跟tabController搭配用 02/14 01:04
kiii210:storyboard問題也感謝, 沒想到這中間還牽扯這麼深.. 02/14 01:05
kiii210:我還有得學... 02/14 01:05