【问题标题】:Gestures handled identically in iPhone and iPadiPhone 和 iPad 中的手势处理方式相同
【发布时间】:2013-01-07 01:55:29
【问题描述】:

我现在正在开发一个应用程序,在该应用程序中,点击在 iPhone 上的处理方式与在 iPad 上的处理方式相同。我没有iPhone,所以我现在使用模拟器进行测试。如果模拟器模拟点击,我以为我可以简单地用鼠标在屏幕上单击,但这似乎不起作用。

所以我想到问题可能是我从 iPad 开始,后来创建了 iPhone 界面(尽管项目本身从一开始就是通用的)。

我从 iPad 的情节提要中复制了手势识别器(点击和两次滑动)并将它们粘贴到 iPhone 的情节提要中。我不认为这会奏效,但我希望这就是我所要做的。无论如何,似乎应该能够从两个故事板手势识别器链接相同的代码。

当这不起作用时,我使用 Control-drag 连接了 iPhone 手势识别器,就像我在 iPad 上所做的那样。这创造了新的方法。由于可以使用相同的代码,我想我只需调用另一个代码:

- (IBAction)tapIphone:(UITapGestureRecognizer *)sender {
   [self tapIpad:sender];
}
- (IBAction)tapIpad:(UITapGestureRecognizer *)sender {

省略代码

}

那也没用。所以接下来我尝试将代码从 iPad 方法复制/粘贴到 iPhone 方法。还是不行。

所以现在我想知道我是否不知道如何在 iPhone 模拟器上正确测试水龙头。我还能错过什么?

【问题讨论】:

  • 您确定要加载您添加了手势识别器的特定 xib 吗?按钮是否工作?并且视图不被其他人重叠?
  • 我认为问题在于手势识别器的复制/粘贴是否/否。他们可能仍然指的是 iPad 视图。所以我删除了它们并将它们从对象库中拖出来,将它们连接起来,它使用上面显示的代码工作。我会将它们作为单独的方法保留,因为您永远不知道一个设备何时需要不同的处理。事实上,我需要调用一个日期选择器,它在 iPhone 和 iPad 上的工作方式不同。

标签: iphone ios simulator gesture tap


【解决方案1】:

很明显,tapIphone 方法根本没有被调用。您可以通过在方法中添加 @NSLog("tapIphone") 来解决这个问题,看看它是否记录。实际上将这些行放入各自的方法中:

@NSLog("tapIphone");
@NSLog("tapIpad");

如果调用了 tapIphone 并且 tapIpad 方法在同一个类中,则应该会发生预期的行为。

您的第一个直觉是将项目从一个故事板复制并粘贴到另一个故事板,这很好。但是,当您执行此操作时,您会丢失所有 IBAction / IBOutlet 连接(它们不会将它们的链接传递到旧情节提要或从旧情节提要中传出),因此您每次都必须重新连接它们。当您尝试将一个设备的界面调整为另一个设备时,这有点痛苦。这并不意味着您必须创建新代码 - 它只是意味着您必须从每个情节提要项目中 CRTL 拖动到要重新连接到的 现有 IBAction 代码项目上(您可以获得相同的结果通过按住 CTRL 键从情节提要项目拖动到相关的 controlView 情节提要图标,该图标将为您提供要连接到的可选 IBAction 项目列表)。您想要复制的任何 IBOutlet 连接也是如此。

这不是模拟器的问题,您只需要调整您对故事板接线的理解即可。

我不建议您建议使用单独的 IBAction 方法来处理不同设备上的不同行为。这将导致更多的布线复杂性,这对调试很不利。有更好的方法可以做到这一点,例如通过检查环境功能或使用:

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
   //iPhone code goes here
} else  {
   //ipad code goes here
}

【讨论】:

  • 所以我可以控制拖动到以前存在的代码?它试图插入的代码呢?顺便说一句,我在复制手势识别器后按 ctrl-drag 重新接线,但它不起作用。我在工作和非工作版本中看到的唯一区别是我从对象库中拖动新控制器而不是复制/粘贴。感谢您提供代码 sn-p。我会用的。
  • 如果您控制并拖动直接在现有的 IBAction 上,它不会插入新代码。如果您控制并拖动就在现有代码行的下方,它将插入一个新行。您还可以按住 ctrl 单击故事板对象,这将显示一个 HUD 显示,其中显示所有可能的选项和所有现有链接。从那里您可以拖出行并删除现有链接(通过单击行中间的小“x”)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 2016-05-16
相关资源
最近更新 更多