[問題] 如何在元件內使用 nib & class
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 去佔位置呢?
有沒有更直接的寫法
謝謝
--
活動/美食計劃
蘭嶼 魚白 勝興車站 星月天空 武陵 草嶺古道
嘉義阿里山小火車 保齡球 司馬庫斯
手包水餃 日月潭纜車 合歡攻頂 馬祖
鹽山 南庄 澎湖 溪頭/松林町 南投天梯
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.251.197.63
※ 文章網址: http://www.ptt.cc/bbs/MacDev/M.1395949569.A.EFE.html
推
03/28 08:18, , 1F
03/28 08:18, 1F
→
03/28 08:18, , 2F
03/28 08:18, 2F
你們教的東西,我開新 project 曾經成功過,的確很簡單,有恍然大悟的感覺
但從同事的架構就是不可以,這時我沒有選擇
就我看同事的 code,會有更複雜的做法..
比方說在 table 裏塞入 cell,我說塞不進去,別人說明明可以,很簡單
我開新專案才知道,真的很簡單
但我就是要在公司的專案架構下啊..
→
03/28 08:57, , 3F
03/28 08:57, 3F
→
03/28 08:57, , 4F
03/28 08:57, 4F
其實我會直接連結的方法 ; 不載入 xib 的話
應該是我文章寫得有點亂了
沒把碰到的狀況說清楚
※ 編輯: HuangJC (60.251.197.63), 03/28/2014 16:05:44
→
03/28 21:17, , 5F
03/28 21:17, 5F
這樣你是有看懂了
我因為這個困擾,所以用別的方法解決
主管會認為:反正你能把事做好就好
而我在乎的是:我的方法很迂迴;真的沒有更直接的方法嗎?
推
03/28 22:58, , 6F
03/28 22:58, 6F
不是,是從我們的架構,我能想到的簡單做法會產生一些困擾
剛我和另一個同事討論,提出我要的,他說他的確是做不到
所以這的確是有點難度,不是我沒好好看文件而已
他比我優秀蠻多的
但我不能一直纏著他啊,所以多少還是會來這邊請教
大家有空再回我就好
※ 編輯: HuangJC (60.251.197.63), 03/30/2014 15:46:58
→
03/31 01:32, , 7F
03/31 01:32, 7F
→
03/31 02:13, , 8F
03/31 02:13, 8F
→
03/31 02:14, , 9F
03/31 02:14, 9F
推
03/31 08:17, , 10F
03/31 08:17, 10F
→
03/31 08:17, , 11F
03/31 08:17, 11F
我所謂迂迴的方法,是'不得不用,但能讓我把程式寫出來'
而我所謂'簡單的方法',是沒寫出來的
---
我從頭說,不談指令,只談概念
目前我在使用現成元件時,比如 UILabel
我可以在 Storyboard 上,直接拉出位置
而元件的 class, 也就是 UILabel
這就是簡單的方法
我自己寫的元件,可不可以也用這麼簡單的方法?
拉出一個位置,然後把自己的 class 打進去
代表這個位置的元件及 class
如果今天是別人寫這樣,我會回可以..
我現在就是等別人說可以,才要繼續講
連文章都有人看錯成敝公司軟體架構是一直重覆載入自己了
那我想一次不要講太多,才不會被誤會
→
04/01 09:47, , 12F
04/01 09:47, 12F
→
04/01 09:47, , 13F
04/01 09:47, 13F
→
04/01 09:48, , 14F
04/01 09:48, 14F
我知道,所以我說,在可以和公司同事描述清楚時,同事也說他辦不到
在這裡我就一次只描述一點點,確定沒誤會後我們再繼續
浪費你的時間我很抱歉,有空再來回應就好
網路文字誤會多,也許我們講同一回事,卻還要說對方是錯的
我明白說,大家沒有回答我的必要,我也已經找到解決方案
我們沒人有義務去了解別人的架構量身訂做解答;自己的作業自己做,我懂
但如果有人說我的做法完全是錯的
他是不是該說說他的正確做法?
如果沒那個耐心講自己的一套,那是不是以後只提點個方向就好
畢竟我們都為自己負責,為什麼一句'你完全是錯的'這麼順口
我和同事寫程式,是接受他任何寫法的
天底下會只有一種寫法嗎?我能限制他嗎?
不,他寫出來我就去適應,除非我的方法好到說服他
以為只有自己對是這行的通病,隨時要提醒自己
→
04/01 10:16, , 15F
04/01 10:16, 15F
→
04/01 10:17, , 16F
04/01 10:17, 16F
→
04/01 10:18, , 17F
04/01 10:18, 17F
那個遞迴不可以用,那我們是有共識了
沒共識的是我用迂迴的方法,而你說那也是錯的
請不要把焦點集中在我也知道不能做的事上
這樣我只能為自己表達能力不好道歉而已
而是,既然你有直接且正確的方法,那是什麼?
搞不好只是因為溝通誤會,其實根本就同一招
1.我要可以在 IB 裡直接打入 class name
2.然後要可以和 nib 檔配合
為了元件的重覆使用,比如我有兩個 controller ,都用 xib 檔繪製 UI
ControllerA.xib, ControllerB.xib
而元件是 MyObj.xib, MyObj.m, Myobj.h (繼承自 UIView)
MyObj.xib 內可以直接打 MyObj 這個 class name
整個元件的 UI 繪製及動作細節,可以全封在 MyObj.* 這三個檔內
為了重覆使用,所以 MyObj 的內部元件,是不會拉任何 reference
到 ControllerA & ControllerB 去的
好,現在我要怎麼把 MyObj 這個元件,擺入 ControllerA.xib 內呢?
我和同事是只會迂迴的方法啦,而且又被說是錯誤的
※ 編輯: HuangJC (175.180.82.140), 04/04/2014 19:22:37
→
04/04 20:09, , 18F
04/04 20:09, 18F
→
04/07 00:54, , 19F
04/07 00:54, 19F
→
04/07 00:54, , 20F
04/07 00:54, 20F
→
04/07 00:56, , 21F
04/07 00:56, 21F
→
04/07 00:58, , 22F
04/07 00:58, 22F
→
04/07 08:17, , 23F
04/07 08:17, 23F
→
04/07 08:18, , 24F
04/07 08:18, 24F
※ 編輯: HuangJC (60.251.197.63), 09/19/2014 12:27:51
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):