Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iPhone应用程序中跨多个屏幕使用通用覆盖的最佳方法是什么?_Iphone_Ios_Uiviewcontroller - Fatal编程技术网

在iPhone应用程序中跨多个屏幕使用通用覆盖的最佳方法是什么?

在iPhone应用程序中跨多个屏幕使用通用覆盖的最佳方法是什么?,iphone,ios,uiviewcontroller,Iphone,Ios,Uiviewcontroller,我正在创建一个应用程序,其主屏幕可以由三种场景之一组成。我们叫他们A、B和C 这些场景的功能截然不同,其用户界面也是如此。为了便于讨论,我们假设每个场景都是一种不同的逻辑拼图,它们之间不共享任何通用的UI元素、逻辑或功能 因此,我希望每个场景都在自己的ViewController中实现。场景将通过“主菜单”以模式显示,因此主菜单将调用类似于[self-presentModalViewController:ScenarioX animated:YES]的内容来显示场景 这里有一个问题:每个场景都有

我正在创建一个应用程序,其主屏幕可以由三种场景之一组成。我们叫他们A、B和C

这些场景的功能截然不同,其用户界面也是如此。为了便于讨论,我们假设每个场景都是一种不同的逻辑拼图,它们之间不共享任何通用的UI元素、逻辑或功能

因此,我希望每个场景都在自己的ViewController中实现。场景将通过“主菜单”以模式显示,因此主菜单将调用类似于[self-presentModalViewController:ScenarioX animated:YES]的内容来显示场景

这里有一个问题:每个场景都有一个特定的用户界面,这在它们之间很常见——比如,屏幕顶部的状态栏中有一个倒计时时钟。通用UI将有自己的逻辑,尽管是最小的。它显然必须运行倒计时时钟,可能在时钟运行时显示“time's up”(时间已到)消息,并响应“back”(返回)按钮,该按钮关闭模式ViewController并返回主菜单

在代码重用、内存管理等方面,实现这一点的最佳方式是什么

我希望有一种技术上的特殊性,而不仅仅是一种“方法”。例如,如果正确的答案是创建状态栏/时钟作为其自己的UIView子类,然后以编程方式将其添加到场景的视图中,那么很好:这是否意味着场景的ViewController必须运行时钟、后退按钮等等


或者是否可以创建一个StatusClock ViewController来管理状态栏、时钟等,并将其添加为场景视图的子视图?

为此,只要我正确解释了您的问题,您的意思是,您有3个对象共享一些次要的通用功能。我要做的是将公共功能抽象为基类,然后让其他3个类从基类继承

因此,您有一个ScenarioBase,它具有常见的功能,如timer属性、startTimer函数、stopTimer函数、倒计时函数、startingTime变量,然后可能是completedScenario的委托协议(这在您的模态视图控制器上调用Dislose)

然后实现自定义拼图的代码,在init中设置其启动时间,调用其继承的startTimer函数,就这样了。您可以在scenarioIsComplete的父类中实现默认功能,可能类似于

@interface Scenario1 : ScenarioBase {
     UIImageView *puzzleBackground; //I don't really know what you want as members
                                   //Lets say this is a custom background for the puzzle
}

@end
-(void)scenarioIsComplete {
     UIViewController *vc = [(ScenarioAppDelegate)([[UIApplication sharedApplication] delegate]) viewController];

     [vc dismissModalViewController];

}

这将处理所有儿童的解雇问题。

谢谢。我想我已经走了一半了,我总是忘记协议。我脑子里有太多的.NET。这就结束了我的循环,谢谢你给我举了一个具体的例子。
-(void)scenarioIsComplete {
     UIViewController *vc = [(ScenarioAppDelegate)([[UIApplication sharedApplication] delegate]) viewController];

     [vc dismissModalViewController];

}