【问题标题】:Programming a Universal App in iOS在 iOS 中编写通用应用程序
【发布时间】:2012-01-15 06:05:09
【问题描述】:

当我编写通用应用程序时,假设我有一个像这样的 IBAction:

(IBAction)magicCode:(id)sender {

    textField1.text = "TEST";

}

我是否需要为每个视图(iPad 和 iPhone)创建一个新的 IBAction。我不能在头文件中有两次 textField1,所以我只是想知道其他人是如何做到这一点的。我是否需要在 iPhone 应用程序中放置一个与 iPad 应用程序名称不同的文本字段?还是其他人都这样做的其他方式?

【问题讨论】:

  • 以防万一你真的这样做了——如果你把事情命名为textField1等等,那么你就是在为一个痛苦的世界做好准备。使用描述性变量名称,以便立即清楚什么是什么。否则,你最终只会让自己感到困惑,让你的生活变得更加艰难。
  • @Jim 谢谢,但这只是一个例子。我遵循传统的命名标准来命名我的对象。

标签: objective-c ios ibaction universal


【解决方案1】:

不,您可以在 UIViewController 中使用相同的 IBAction 和 IBOutlet 来处理两个不同 Nib 中的文本字段(一个用于 iPhone,一个用于 iPad)。这就是 MVC 架构中视图控制器和视图之间的全部分离点。

只需在两个 Nib 中使用相同的 UIViewController 作为文件的所有者,并建立所有适当的 IBOutlet 和 IBAction 连接,一切都会正常工作。

【讨论】:

  • 那是“文件的所有者”,而不是“文件管理器”。
【解决方案2】:

我是否需要为每个视图(iPad 和 iPhone)创建一个新的 IBAction。

首先,动作通常包含在视图控制器中,而不是视图中。我想这可能就是你的意思,但我指出了不同之处,因为我看到很多人在这一点上感到困惑。

当您创建一个通用应用程序时,即一个将其 UI 调整到运行它的设备(iPad 或 iPhone/iPod Touch)的单个应用程序,一个常见的策略是提供不同的视图布局以充分利用可用的屏幕大小,但要使用相同的视图控制器。因此,例如,假设您有一个带有主/详细界面的应用程序。在小型设备上,您将首先呈现界面的主要部分,当用户选择某些内容时,您将显示界面的细节部分。在 iPad 上,由于它的屏幕更大,您可以在拆分视图中同时显示主界面和详细界面。比较两者,视图很可能不同,视图控制器的呈现方式也不同,但视图控制器本身应该保持不变。这是一件好事,因为创建应用程序的大部分工作都涉及创建视图控制器。

如果您的应用与我所描述的相似(或者如果您可以使其相似),那么不,您不需要为 iPad 和 iPhone 单独操作,因为您将在两者中使用相同的视图控制器案例。但是,有时,应用程序在两种不同设备上的行为差异很大,因此具有特定于 iPad 和 iPhone 的视图控制器是有意义的。通过从包含操作的公共父类中派生每个操作,您可能仍然能够使用相同的操作。如果没有,您需要让每个类实现自己的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    相关资源
    最近更新 更多