【问题标题】:Windows in iOS, best way to build a multiple-activities app from Android?iOS 中的 Windows,从 Android 构建多活动应用程序的最佳方式?
【发布时间】:2011-06-21 23:03:25
【问题描述】:

我目前正在为 Android 和 iOS 开发一个应用程序,事情是...我从 Android 开始,我的应用程序有几个具有不同布局的活动(如果您不熟悉 android,则屏幕具有不同的 GUI),大多数其中显示非常不同的内容;地图、带有数据库数据的列表、图像、带有按钮的文本字段等等(而且大多数时候屏幕的方向会发生变化)。

问题出在 iOS 上:

  • 如何从 IBActions 创建更多窗口? (这是正确的方法吗?)。

  • 创建窗口后,如何创建新界面? (我需要另一个 .xib 文件吗?)

  • 如果用户完成一个窗口后,前一个窗口是否仍保留在内存中并且可以重新打开? (我可以使用导航选项卡吗,即使第一个窗口没有使用它?)这是一个主要问题,因为 iPhone 没有后退按钮,而 Android 非常依赖这些按钮...

  • 另外,如果我不能在多个窗口中拆分我的程序,我的应用程序会不会因为销毁和构建视图而占用大量内存?

我是 Cocoa 开发的新手,我已经读过一本关于 Objective C 编程的书(只教授语法等),另一本关于简单 iPhone 应用程序的书(所有这些都在一个窗口中完成,改变了视图以编程方式),我目前正在阅读另一个,但我无法找到我的问题的简单答案......

我的意思是我得到了 Obj-C 以及如何构建 iPhone 应用程序(很好),但问题可能是我来自更直接的 Android 开发。每次我看到一个 iOS 项目时,我都觉得它一团糟,developer.apple.com 中的文档也没有多大帮助,我找不到我想要的。

希望有人已经经历过这件事并愿意为我指明正确的方向,谢谢!

【问题讨论】:

    标签: iphone android objective-c ios cocoa-touch


    【解决方案1】:

    我建议您从苹果开发者网站上的View Controller Programming Guide 开始。我想你会发现它很有帮助。

    要回答您的问题,您可以独立开发每个视图。根据您的目的,从 nib 文件开发每个都可以。在我现在正在开发的应用程序中,我有一些是我以编程方式开发的,还有一些是从 NIB 文件中引入的。全取决于你。我上面提到的指南讨论了这两种方法。

    关于从按钮按下加载视图,您可以这样做。根据您使用的视图控制器,它可以很容易地完成。例如,使用导航控制器,您只需创建视图实例并将其推送到堆栈上。完成视图后,将其弹出并返回到之前的视图。

    关于记忆,这始终是一个问题。你可能想看看The Memory Management Programming Guide

    祝你好运。我自己刚刚开始进行 Android 开发。

    【讨论】:

    • 非常感谢!如果您需要有关 android 的帮助,请告诉我!
    • 又打扰你了,克里斯……你知道如何制作一个带有 3 个通向不同屏幕的按钮的主菜单吗?我的主菜单由带有应用程序徽标的标题图像和 3 个使用图像的按钮组成...我已经使按钮工作(它们打开了一个警报对话框)但是,正如我在文档中阅读的那样,我需要一个视图控制器来更改屏幕内容,对吗?我该怎么做?我只找到基于导航的应用程序和表格视图的示例...
    • @CodeKrieger - 好吧,看看导航控制器作为开始的地方。例如,将您的三个按钮作为导航控制器中的第一个视图放在一个视图中。在按钮的每个方法中,创建要与该按钮关联的视图控制器,并将其推送到视图控制器堆栈上。如果需要,您可以在界面生成器中单独定义这些视图中的每一个。最终,您可能会选择放弃导航控制器,但这是开始并了解事情如何运作的好方法。很抱歉花了这么长时间才回复您。
    • 别担心!哈哈谢谢你!尽管我在一些修补后设法自己到达那里哈哈再次,非常感谢你
    【解决方案2】:

    克里斯已经提供了一个很好的答案,但我想补充几点来解决具体问题。

    iOS 应用程序通常只有一个 UIWindow。在该窗口中,您可以呈现多个视图。

    应用程序通常被组织成几个逻辑屏幕的内容,每个屏幕都由一些 UIViewController 子类管理。

    每个 UIViewController 实例都有一个根视图,其中可能包含许多子视图。 UIViewController 的视图应填充其窗口或由 Apple 的容器视图控制器类(UINavigationController、UITabBarController、UISplitViewController 等)之一提供的某些框架。您不应将一个 UIViewController 的视图添加为另一个 UIViewController 的视图的子视图。

    如果视图不可见,当应用程序收到内存警告时,UIViewController 将尝试卸载它们的视图。查看类的生命周期方法,如-viewDidUnload。您应该支持并利用此行为来减少内存占用。将 UIViewController 保存在内存中而不加载视图应该具有最小的开销,允许您保持一些持久状态,并且可以在需要时重新加载每个控制器的视图。

    通常要在视图之间转换,控件会向当前视图控制器发送消息(通常通过 IBAction 绑定)。当前控制器将触发到另一个视图控制器的转换。它可以通过创建一个新的视图控制器并将其推送到当前导航控制器或将新控制器呈现为模态来实现。它可能引用了一些现有的控制器并呈现出来。它可能会将自己从导航堆栈中解散以显示先前的控制器。它甚至可能将消息向上传递到控制器的层次结构,直到某个父级切换可见选项卡、关闭或呈现模式等等。

    您还可以通过添加、移除、隐藏或移动 UIViewController 根视图的子视图来响应 IBAction 来触发较小的转换。

    【讨论】:

    • 我一直在阅读 Chris 提供给我的一些文档,我明白了你所说的大部分内容,不幸的是我仍然卡住了......我认为我需要一个基于导航的应用程序,但大多数这些示例使用表格视图,而我对这样的东西没有用...此外,文档中充满了文本,没有代码示例...我不知道如何做一些简单的事情,比如带有 3 个按钮的主菜单导致不同的屏幕......我仍然无法实现,有什么想法吗?
    • 基于导航的应用听起来是正确的结构。使用现有的视图控制器创建一个导航控制器作为它的根控制器。让响应这些按钮的 IBAction 方法将新的视图控制器推送到导航控制器上。
    • 对不起,你这么菜鸟,但你说得这么轻松......哈哈哈你知道我在哪里可以找到一些示例代码吗?
    • 我认为您确实在寻找基于导航的应用程序模板所提供的功能级别。它包含一个表格视图并推动其“详细视图控制器”以响应表格单元格选择而不是按钮按下这一事实不应产生显着差异。抱歉,我手头没有确切的例子。
    • 不管怎样,谢谢你的帮助,现在我知道这是正确的方法,我会继续努力,Vielen dank!
    【解决方案3】:

    Flash Builder 4.5.1 现在允许您构建一个应用程序并编译到多个设备

    更新:试试 XAMARIN,它是 Visual Studio 的一部分: https://www.xamarin.com/

    【讨论】:

    • 但是,这真的是一个好方法吗?我已经看到它在行动中,对于游戏来说很棒,但是更复杂的应用程序呢?有人说它运行缓慢……而且我更喜欢用母语开发,我的意思是,我也期待成为一名 iOS 开发人员……
    • 我同意,但是如果您正在寻找一个平台来编写一次代码并部署在多个平台上,您需要使用 Adob​​e Flash Builder 或类似 PhoneGap 的工具
    猜你喜欢
    • 1970-01-01
    • 2015-06-25
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多