[问题] 如何在元件内使用 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