作者markzog21 (残羽星辰)
看板MacDev
标题Re: [问题] 关於iphone UIkit delegate的问题
时间Sat Jul 17 15:42:36 2010
※ 引述《zonble (zonble)》之铭言:
: ※ 引述《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 上…等等。
简单来说,我把delegate看成一个设定框架的委派程式,也就是说我是将画面上的元件拉
好以後,剩下的外框元件如tabBar及navBar等东西丢在delegate的
- (void)applicationDidFinishLaunching:(UIApplication *)application完成
但我不太确定是否每个Controlview都可以自行设定其delegate
还是说一个application只能有一种delegate?
: 那接下来,问题其实应该是-我们在程式的其他地方,要怎样呼叫 XXXAppDelegate
: 这个 instance?
: 因为 UIApplication 是个 singleton 物件,所以,我们可以透过 UIApplication
: 找到他的 delegate
: [UIApplication sharedApplication].delegate;
: 比方说,你想要使用那边所定义的 window
: XXXAppDelegate *appDelegate = (XXXAppDelegate *)[UIApplication sharedApplication].delegate;
: UIWindow *window = appDelegate.window;
: 就这样。
这边我试了以後,依然没有出现我设定的delegate = ="
这样说好了
我今天有2个页面
AAAAppDelegate.h
AAAAppDelegate.m
AAAViewController.h
AAAViewController.m
BBBAppDelegate.h
BBBAppDelegate.m
BBBViewController.h
BBBViewController.m
程式一开始的main是呼叫A的delegate跟ViewController的
但我在A的delegate里完全没任何动作因为我A的画面只有一张图然後点下去会
切换成BViewController
但我却需要在B的地方呼叫B的delegate来实作我的外框元件
我被要求这样做的时候也觉得很奇怪= ="
但後来想一想,或许很多地方的程式View的确都会有这样类似的要求
不管如何先感谢帮我解答的大大们@@"
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.64.76.136
1F:→ uranusjr:你似乎还是没搞懂 delegate 的概念, 建议先去找一些这方 07/17 15:49
2F:→ uranusjr:面的资料, 重新整理一下想法 07/17 15:49
3F:推 Blueshiva:你完全搞错delegate是什麽了,事情完全不是你想的那样 07/17 15:59
4F:推 BlueKidds:这看来 b的外框为何不用b的controller去作 07/17 16:09
5F:→ markzog21:我指的外框是tabBarController及navigationController 07/17 16:50
6F:→ markzog21:所以放在B的controller里的话要在哪放? ViewDidLoad? 07/17 16:51
7F:→ markzog21:我放了以後依然没有出现 07/17 16:51
8F:→ markzog21:而且想一下如果我在viewController里放tabBar及navBar的 07/17 16:52
9F:→ markzog21:话,会不会只有这张view里面才有,其他张又没了? 07/17 16:53