2017-01-02 6 views
0

私は客観的なCで本当に悪いです。私はこのワンボタンクリックハンドラを書く必要があります。 ()Objective Cでは、メソッドセレクタではなく、通常の関数をイベントハンドラとして使用できますか?

私が理解したよう
NSButton *button = ... 
[button setAction:buttonPressed]; 
// This also doesn't work 
[button setAction:@selector(buttonPressed)]; 

void buttonPressed() { NSLog(@"Button pressed!"); } 

、SetActionは一種のメソッドポインタのようなものであるセレクタが必要です。現在、私はこれを持っています。私はここにクラスがないので、メソッドはありません。ボタンクリックイベントに単純な関数を使用する方法はありますか?

おかげ

+0

どのようにクラスを持たないのですか?あなたが投稿したこのコードはどこですか? – rmaddy

+0

私はXコードなしで書く簡単なアプリケーションがあります。現在、main()とbuttonPressed()という2つの関数があります。私はクラスを定義してイベントハンドラを設定する必要があるように見えます。 – Alex

+0

AppDelegateはありませんか?ビューコントローラはありませんか?いいえ、別に? :)いくつかのUIを持つObjective-Cチュートリアルを試してみてください。あなたはあなたが過去20年ほど逃してきたことをあなたのお尻を蹴るでしょう。 :D – Eiko

答えて

1

いいえ、あなただけのObjective-Cメソッドセレクタを期待するものにプレーンなC関数、いくつかの(への参照)を渡すことはできません。もちろん、いくつかのクラスでメソッドをラップし、そこからネイティブメソッドを呼び出すことができます。

簡略化した説明は、この方法を「一部のオブジェクト」と呼びます。それはフレームワークがここでどのように働くかです。

+0

すばらしい返答をいただきありがとうございます。 CとGoから来て、それは本当に奇妙です:) – Alex

+0

メソッドがどのように呼び出されるかについては、少し読んでください。これは単なる関数呼び出しではなく、メッセージの結果です。アップルはそれをきちんと説明します。 –

+0

申し訳ございませんが、Appleのドキュメントへのリンクは次のとおりです。https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html – Eiko

関連する問題