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

看板MacDev作者 (吹笛牧童)時間10年前 (2014/03/28 03:46), 9年前編輯推噓3(3021)
留言24則, 5人參與, 最新討論串1/2 (看更多)
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
Interface Builder都已經幫你把關係連結好了, 你為什麼還要
03/28 08:57, 3F

03/28 08:57, , 4F
自己再call一次?
03/28 08:57, 4F
其實我會直接連結的方法 ; 不載入 xib 的話 應該是我文章寫得有點亂了 沒把碰到的狀況說清楚 ※ 編輯: HuangJC (60.251.197.63), 03/28/2014 16:05:44

03/28 21:17, , 5F
看不懂 不過你自己call 自己當然一直遞迴
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
錯的架構就順手改掉啊 Xcode refactor 很方便了
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
1. 你所要做的事,可以直接在IB內, 元件的Info改class name
04/01 09:47, 12F

04/01 09:47, , 13F
就可以做到.
04/01 09:47, 13F

04/01 09:48, , 14F
2. 你描述問題的方式有問題,怪我囉?
04/01 09:48, 14F
我知道,所以我說,在可以和公司同事描述清楚時,同事也說他辦不到 在這裡我就一次只描述一點點,確定沒誤會後我們再繼續 浪費你的時間我很抱歉,有空再來回應就好 網路文字誤會多,也許我們講同一回事,卻還要說對方是錯的 我明白說,大家沒有回答我的必要,我也已經找到解決方案 我們沒人有義務去了解別人的架構量身訂做解答;自己的作業自己做,我懂 但如果有人說我的做法完全是錯的 他是不是該說說他的正確做法? 如果沒那個耐心講自己的一套,那是不是以後只提點個方向就好 畢竟我們都為自己負責,為什麼一句'你完全是錯的'這麼順口 我和同事寫程式,是接受他任何寫法的 天底下會只有一種寫法嗎?我能限制他嗎? 不,他寫出來我就去適應,除非我的方法好到說服他 以為只有自己對是這行的通病,隨時要提醒自己

04/01 10:16, , 15F
你那個遞迴呼叫很明顯就是自己根本沒搞清楚
04/01 10:16, 15F

04/01 10:17, , 16F
initWithCoder什麼時候,為了什麼被呼叫的,這叫"基本"
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
所以你到底去看 initWithCode 是為了什麼被呼叫了沒?
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
文章代碼(AID): #1JD801x- (MacDev)
文章代碼(AID): #1JD801x- (MacDev)