0

我现在正在开发一个应用程序,在该应用程序中,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 模拟器上正确测试水龙头。我还能错过什么?

4

1 回答 1

0

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

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

如果 tapIphone WAS 被调用并且 tapIpad 方法在同一个类中,那么预期的行为应该已经发生。

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

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

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

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
   //iPhone code goes here
} else  {
   //ipad code goes here
}
于 2013-01-07T02:54:14.473 回答