我现在正在开发一款应用程序,在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模拟器上正确测试水龙头。还有什么我可以错过的?
答案 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
}