1

私は CS193p スタンフォード iOS コースに取り組んでおり、割り当て 3 をほぼ完了しています。この課題では、グラフ電卓を iPad 用のユニバーサル アプリにも変換します。プログラム (例: "x + 3") が電卓に入力され、ユーザーが [グラフ] ボタンを押すと、アプリはグラフを描画します。iPhone では、Graph ボタンが押されたときに単純にセグエクトしましたが、iPad では、Graph ボタンからターゲット アクションを設定する UISplitViewController があります。

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

これはsetProgram:GraphViewController を呼び出し、GraphView を呼び出しsetNeedsDisplay:てグラフを描画する必要があります。

比較のために、iPhone で動作するセグエ メソッドを次に示します。

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

ボタンとそのアクション メソッドの間に接続が確立されていることは確かですが、アプリを実行すると、ボタンが押されたときにこのアクション メソッドが呼び出されることはありません。メソッドが呼び出されることを確認するためにチェックするものは他にありますか?

4

2 に答える 2

2

私も同じ問題を抱えていました。IBOutlets と IBActions ですべてを適切に接続しました。問題の原因は、タッチをブロックしているボタンの上にある透明なビューです。

ビューの下にあるボタンをブロックしないようにビューのサイズを変更した後、問題は解決しました。

于 2013-09-03T06:36:45.643 に答える
0

私のコード自体には何の問題もなかったことがわかりました。ストーリーボードをいじってみると、マスター ビューに新しいボタンを追加しても、アプリケーションの起動時にそれらのボタンが表示されないことに気付きました。ストーリーボードの名前を から に変更しようとしたところiPad.storyboardiPad_1.storyboard変更が表示されましたが、ローテーション コードはどれも有効ではありませんでした。この混乱全体に対する私の解決策は、新しいストーリーボードを追加する直前に、アプリの以前のバージョンに戻ることでした。iPad ストーリーボードを再度追加したところ、すべて正しい接続を行うことができました。

これを確認するために、私の友人が Github でプロジェクトをチェックアウトしたところ、IBAction メソッドを呼び出すことはできませんでしたが、彼にとっては問題なく機能したと報告されました。ローカルのストーリーボード設定に問題があり、アプリケーションが正常に動作していなかったと思います。これからの私の教訓は、特にバージョン管理を扱う場合は、ストーリーボード ファイルの命名と名前変更に注意することです。

于 2012-04-25T16:22:25.723 に答える