2012-04-23 55 views
1

我正在通过CS193p Stanford iOS课程工作,并且几乎完成了作业3 - 我将图形计算器转换为iPad的通用应用程序。当程序(例如“x + 3”)输入到计算器中,然后用户按下图形按钮时,应用程序绘制图形。在iPhone上,我只是segued当按下图形按钮,但在iPad上,我有一个UISplitViewController,我成立了由图形按钮目标的行动:iOS IBAction方法永远不会被调用

- (IBAction)ipadGraphPressed:(UIButton *)sender { 
    if ([self splitViewGraphViewController]) { 
     [[self.splitViewController.viewControllers lastObject] setProgram:self.brain.program]; 
    } 
} 

这在GraphViewController,来电setProgram:这然后在GraphView上调用setNeedsDisplay:并绘制图形。

为了便于比较,这里是SEGUE方法对iPhone的作品:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    [segue.destinationViewController setProgram:self.brain.program]; 
} 

我非常肯定的是,连接按钮,其操作方法之间建立,但是当我运行应用程序时,这个动作当按钮被按下时,方法永远不会被调用。还有什么要检查以确保方法被调用?

+0

如果操作方法在按下按钮时没有被调用,那么'IBAction'不会正确地绑定到按钮上。你确定你把'IBAction'连接到了'Touch up inside'事件,并且你正在创建视图控制器的方式允许连接在实例化时为你自动装配吗? – aroth 2012-04-23 23:27:58

+0

我很确定Touch Up Inside事件已连接。至于视图控制器设置,我不太确定。 iPhone的segue通过设置GraphViewController程序属性来工作,所以我在action方法中做了完全相同的事情。我认为这会起到同样的作用。 – Paul 2012-04-23 23:55:09

+0

首先重新检查该按钮是否将其操作连接到ipadGraphPressed。然后添加NSLog(@“%@”,发件人);在方法内部,按下按钮并查看按钮是否正常工作。 – Pochi 2012-04-24 00:07:07

回答

0

事实证明,我的代码本身没有问题。在处理故事板后,我注意到即使我向主视图添加了新按钮,它们在应用程序启动时也从未出现过。我尝试将故事板的名称从iPad.storyboard更改为iPad_1.storyboard,然后我的更改显示出来,但是我的旋转代码没有生效。我解决这个问题的方法是在我添加新的故事板之前回到应用程序的先前版本。我重新添加了一个iPad故事板,并能够建立所有正确的连接。

为了证实这一点,我的一个朋友在Github上检查了项目,并报告说虽然我无法调用IBAction方法,但对他来说工作得很好。我相信有一些东西与我的本地故事板设置混淆了,这阻止了应用程序正常工作。我从这里得到的是要小心命名和重命名故事板文件,特别是在处理版本控制时。

2

我有同样的问题。我将IBOutlets和IBActions上的所有内容都正确连接起来。造成问题的原因是按钮顶部的透明视图妨碍了触摸。

我调整了视图大小后,它不会阻止它下面的按钮,它解决了我的问题。

相关问题