作者zonble (zonble)
看板MacDev
标题Re: [问题] 关於iphone UIkit delegate的问题
时间Sat Jul 17 01:09:23 2010
※ 引述《markzog21 (残羽星辰)》之铭言:
: 主页mainView (只有一张image 按下去或是过两秒自动跳到userView)
: │
: ˇ
: 使用者主画面userView (程式各种功能)
: 我的问题变成如果mainView就呼叫delegate 的话,会变成mainView 也有delegate的功能
: (如tabBar跟navagationBar)
: 而我在userView的时候又需要delegate的功能
: 所以我想要说在我需要delegate的时候在把他叫出来,而只要秀mainView的时候(有点像程式一
: 开始的动画但因为我可能会包4个不太一样的application所以希望是用View的方式表现)
: 就不用delegate
: 然後我研究了很久都还是卡住...不知道是哪里的想法有误
: 上一篇的推文中说把delegate 设为nil就可以了,但我就是这里不懂= ="
: 要从哪设还有哪可以重新呼叫之类的。
呃,您好像完全没有搞懂 delegate 的意思。
用最简单的方式来解释 delegate,假如说,B 是 A 的 delegate 好了,
代表 A 有一个成员变数指定到 B,但是 A 并不 retain B,而当 A 要做
某些事情的时候,会去问一下 B 要怎麽做。比方说,你生一个
UITableView 的时候,会给一个 delegate,所以当使用者点到了某个 cell
的时候,这个 table view 就会问 delegate 应该做什麽事情。
就你的文章来看,你似乎把 delegate 只当成 UIApplication 的 delegate
只把 delegate 当成某个特定物件,但是 delegate 是整个 Mac 与 iPhone
上非常常见的连接物件关系的方法,而不只是某个特定物件而已。
我们先来搞懂你所说的那个「有 tabbar 与 navigation bar 」的
delegate 是什麽意思。如此一来,我们需要先了解,一个 iPhone 应用程式
在启动的时候发生哪些事情。在应用程式启动时,就像所有的 C 程式一样,
会进入 main() 这个进入点,然後,在 main() 里头预设有一行
UIApplicationMain(argc, argv, nil, nil);
这时候,会先产生整个应用程式的第一个物件: UIApplication,而
这个 UIApplication 物件会开始载入 MainMenu.nib,并且设定一个
delegate 物件,这个物件就是范本帮你产生的哪个 XXXAppDelegate,
我们知道,delegate 就是当 A 要做哪件事情的时候,去问问 B 应该怎麽做
UIApplication 把程式启动完毕之後,就去问你的 XXXAppDelegate 要做什麽
所以就会进入这一行
- (void)applicationDidFinishLaunching:(UIApplication *)application
UIAppication 物件把自己(self)传递给 XXXAppDelegate,告诉他程式执行
起来了,现在请 XXXAppDelegate 来决定应该做些什麽事情,我们就在这边
决定,要生出一个 window 出来,然後生出一个 navigatrionController,把
view 叠在 window 上…等等。
那接下来,问题其实应该是-我们在程式的其他地方,要怎样呼叫 XXXAppDelegate
这个 instance?
因为 UIApplication 是个 singleton 物件,所以,我们可以透过 UIApplication
找到他的 delegate
[UIApplication sharedApplication].delegate;
比方说,你想要使用那边所定义的 window
XXXAppDelegate *appDelegate = (XXXAppDelegate *)[UIApplication sharedApplication].delegate;
UIWindow *window = appDelegate.window;
就这样。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.42.189.204
1F:推 Jerrynet:用self.delegate可以吗@@? 07/17 01:50
2F:→ zonble:那要看这里的 self 是指向什麽东西啊 07/17 01:56