UIViewController .... AppDelegate ....代码在哪里!

时间:2009-03-27 23:35:44

标签: iphone

我正在慢慢接受Objective-C和iPhoneSDK,但是我遇到了一些问题,让我不知所措。

我正在充实一款游戏,我希望它能拥有像闪屏,标题,帮助等屏幕。我目前正在做的是为每个屏幕创建一个新的UIViewController和一个新的笔尖,这是正确的做法?在主AppDelegate中,我创建了显示视图的方法,并使用[window addSubView:controller.view]添加它们。我发现的是,随着显示/隐藏代码位于AppDelegate中,我必须在加载的控制器中创建AppDelegate的引用,以便定位隐藏代码。 这看起来有点尴尬但我希望我可能接近这个错误,你们通常会做这类事情吗?

// example from AppDelegate
-(IBAction)showHelp:(id)sender
{
    helpScreen = [[helpController alloc] initWithNibName:@"helpView" bundle:nil];

    // send copy of self in order to target closeHelp method from InterfaceBuilder
    helpScreen.appDel = self;

    helpScreen.view.alpha = 0;
    [window addSubview:helpScreen.view];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
    helpScreen.view.alpha = 1.0;
    [UIView commitAnimations];
}

非常感谢,

2 个答案:

答案 0 :(得分:3)

  
    

UIViewController和每个屏幕的新笔尖,这是正确的做法

  

叶氏!

  
    

[window addSubView:controller.view]

  

您是否还在动画结束时删除旧视图?你应该是,否则你会有多个视图控制器同时运行,这是你真正不想要的。

  

我发现的是   显示/隐藏AppDelegate中的代码,   我必须创建一个参考   AppDelegate在加载的控制器中   为了定位隐藏代码

在某个地方你需要负责切换视图的代码,如果视图可以控制这种切换,那么他们确实需要一种方法来触发它。而不是app委托我通常有一个执行这些更改的RootViewController。

我倾向于从具有委托属性的基类派生这些视图中的每一个,以执行这些更改。当视图需要更改时,它们会调用委托中的函数。这些通常是;

  • pushView - 暂时将视图推送为活动视图,当前视图将从视图层次结构中删除但不会被销毁。这将用于帮助屏幕。
  • popView - 销毁当前视图并恢复上一个视图。这就是帮助屏幕将自行删除的方式。
  • changeView - 销毁当前视图并替换为指定视图。这可能是您从帮助的第1页更改为第2页的方式。

E.g。

// your root controller
-(void) changeView:(UIViewController) newController
{
  newController = blah blah;
  newController.delegate = self;

  // add newController view, remove old one etc
}

// new controller
-(void) userPressedHelp
{
  UIViewController* help = blah blah;
  [self.delegate pushView: newController];
}

// help controller
-(void) userPressedOk
{
  [self.delegate popView];
}

答案 1 :(得分:0)

这对我来说似乎很合理。我是Obj-C的新手,但这就是我完成应用程序的方式。

只要ViewControllers彼此不了解,我认为你做得很好。