手势在iPhone和iPad上完全相同

时间:2013-01-07 01:55:30

标签: iphone ios simulator gesture tap

我现在正在开发一款应用程序,在iPhone上可以像在iPhone上一样处理点击。我没有iPhone,所以我现在正在使用模拟器进行测试。如果模拟器模拟水龙头,我想我只需用鼠标点击屏幕,但这似乎不起作用。

所以我想到可能问题是我开始使用iPad并稍后创建了iPhone界面(虽然项目本身从一开始就是通用的)。

我从iPad的故事板中复制了手势识别器(点击和两次滑动)并将其粘贴到iPhone的故事板中。我不认为这会起作用,但我希望这就是我所要做的一切。在任何情况下,似乎应该能够从两个storyborad手势识别器链接相同的代码。

如果不起作用,我就像使用iPad一样使用Control-drag连接iPhone手势识别器。这创造了新的方法。由于可以使用相同的代码,我以为我只是打电话给另一个:

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

省略代码

}

这也不起作用。接下来我尝试将代码从iPad方法复制/粘贴到iPhone方法。它仍然无效。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

你的第一个直觉,就是将一个故事板中的项目复制并粘贴到另一个故事板上,这很好。但是,当你这样做时,你会失去所有的IBAction / IBOutlet连接(他们不会将他们的链接带到旧故事板上,他们只是去了),所以你必须每次重新连接它们。当您尝试将接口从一个设备调整为另一个设备时,这有点痛苦。这并不意味着您必须创建新代码 - 它只是意味着您必须从每个故事板项目CRTL拖动到您要重新连接到的现有 IBAction代码项目(您可以获得相同的结果)通过CTRL-从故事板项目拖动到相关的controlView故事板图标,该图标将显示要连接的可选IBAction项目列表。对于要复制的任何IBOutlet连接也是如此。

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

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

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