[問題] 如何在元件內使用 nib & class

作者: HuangJC (吹笛牧童)   2014-03-28 03:46:05
Dear ALL:
在一張大圖裡,我塞入很多元件
其中一個是 MyView, 繼承自 UIView
我知道可以在 IBuilder 環境填入 class name
於是執行時 MyView 的
- (id)initWithCoder:(NSCoder *)aDecoder
就被呼叫了
'如果'我在這裡面填入 (我強調了如果,表示我知道這樣做有問題;不是不知道)
[[NSBundle mainBundle]loadNibNamed:@"MyView" owner:self options:nil][0];
那麼在載入時會遞迴個不停;原來 loadNib 本身,內部又會去啟動 initWithCoder!!
我的解決方法是,在大圖的 .m 檔 (或說在 controller 檔)
那邊只關聯一個 UIView, 而不是關聯 MyView
然後利用這個 UIView 提供的座標去手動載入它
View = [[MyView alloc] initWithFrame:UIViewFrame.bounds];
這時因為我是用 initWithFrame 來初始 MyView 的
所以在其內擺入 loadNib 相關程式碼
執行至此時, loadNib 依然內部會叫用 initWithCoder
但現在沒關係了,不會遞迴叫用了,因為 initWithCoder 裡,我不安排 loadNib 了
程式是寫出來了,只是覺得要繞一大圈
為什麼我不能在 IBuilder 環境直接填 class name
而且要利用一個 View 當做 Frame 去佔位置呢?
有沒有更直接的寫法
謝謝
作者: Blueshiva (龍野南雲)   2014-03-28 08:18:00
你的寫法完全是錯的...就說了不要蠻幹,先去念些基礎的再來吧...
作者: atst2 (atst2)   2014-03-28 08:57:00
Interface Builder都已經幫你把關係連結好了, 你為什麼還要自己再call一次?
作者: yuanruo (罪を憎んで人を憎まず)   2014-03-28 21:17:00
看不懂 不過你自己call 自己當然一直遞迴
作者: Blueshiva (龍野南雲)   2014-03-28 22:58:00
你們公司的專案"架構"是一直重複載入自己?這...
作者: hSATAC (cAt Ash)   2014-03-31 01:32:00
錯的架構就順手改掉啊 Xcode refactor 很方便了
作者: HuangJC (吹笛牧童)   2014-03-31 02:13:00
不是錯啦,是我想要更方便;有點落落長了,誰願意接我私信再回板上有點浪費大家時間;謝謝
作者: Blueshiva (龍野南雲)   2014-03-31 08:17:00
你能想到的所謂"簡單的方法"是因為你認知錯誤才會造成的你的方法不是迂迴,是錯的,根本上就是錯的
作者: atst2 (atst2)   2014-04-01 09:47:00
1. 你所要做的事,可以直接在IB內, 元件的Info改class name就可以做到.2. 你描述問題的方式有問題,怪我囉?
作者: Blueshiva (龍野南雲)   2014-04-01 10:16:00
你那個遞迴呼叫很明顯就是自己根本沒搞清楚initWithCoder什麼時候,為了什麼被呼叫的,這叫"基本"然後不去搞清楚他,自己亂搞掛掉了,這叫"理所當然"所以你到底去看 initWithCode 是為了什麼被呼叫了沒?
作者: HuangJC (吹笛牧童)   2014-04-07 00:54:00
我可以貼一段英文,也可以英翻中,但那沒有意義當會誤會時,會覺得看中文文件也要中翻中而且誤會的那部份,還可以整個和文件對映起來,錯也錯得很妙單純回你問題:看了
作者: Blueshiva (龍野南雲)   2014-04-07 08:17:00
所以是不是我很久之前就跟你講過的,你根本沒搞清楚在幹什麼?是不是請你不要老是拿以前的經驗硬套?

Links booklink

Contact Us: admin [ a t ] ucptt.com