永远不会调用iOS IBAction方法

时间:2012-04-23 23:23:03

标签: ios segue ibaction cs193p

我正在完成CS193p斯坦福iOS课程,几乎完成了作业3 - 我将图形计算器转换为iPad的通用应用程序。当程序(例如“x + 3”)输入计算器然后用户按下Graph按钮时,app绘制图形。在iPhone上,我只是在按下Graph按钮时进行了搜索,但在iPad中,我有一个UISplitViewController,我从Graph按钮设置了一个目标动作:

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

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

为了比较,这里是适用于iPhone的segue方法:

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

我非常确定在按钮及其操作方法之间建立了连接,但是当我运行应用程序时,按下按钮时永远不会调用此操作方法。还有什么要检查以确保调用该方法吗?

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。我在IBOutlets和IBActions上正确连接了所有内容。导致问题的原因是按钮顶部的透明视图阻挡了触摸。

在我调整视图大小以使其不会阻挡其下方的按钮后,它解决了我的问题。

答案 1 :(得分:0)

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

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