0

iOSにC++プロジェクトがあります。Objective-Cを必要とする一部のタスクを除いて、ほとんどの場合C++を使用します。たとえば、UIAlertを表示します。

そこで、C++からUIAlertを呼び出します。結果を取得し、ユーザーがタップしたボタンを知るにはどうすればよいですか?

これは、Objective-Cを呼び出すC++クラスの実装です。

void iOSBridge::iOSHelper::ShowAlert()
{
    [IsolatedAlert showAlert];
}

そしてここにObjective-Cの実装があります:

+ (void)show{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning" 
                                                    message: @"hello" 
                                                   delegate:self 
                                          cancelButtonTitle:@"Cancel" 
                                          otherButtonTitles:@"OK", nil];
    [alert show];
    [alert release];
}

+ (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

}

clickedButtonAtIndexデリゲートからC++を再度呼び出す方法はありますか?

ありがとう。

4

2 に答える 2

0

このクラスの拡張を次のようにし.mm
ます次に静的変数YourClaas *delegate;を入れます

+ (void)showAlertWithDelegate:(YourClass*)del{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning" 
                                                    message: @"hello" 
                                                   delegate:self 
                                          cancelButtonTitle:@"Cancel" 
                                          otherButtonTitles:@"OK", nil];
    delegate = del;
    [alert show];
    [alert release];
}

+ (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
   del->buttonClickAtIndex(buttonIndex);
}

ファイルvoid buttonClickAtIndex(int index)でメソッドを定義しますcpp

于 2012-07-30T15:52:57.147 に答える
0

Objective C クラスから C++ クラスを呼び出すことを妨げるものは何もありません。Objective C クラスに、C++ クラスへのある種のハンドルを提供する必要があります。これは、インスタンス変数として格納する必要があります。その後、あなたはそれで好きなことをすることができます。

あなたのようにクラスメソッドだけを使用している間は、それを達成するのは厄介です. インスタンス メソッドを使用し、C++ 側からインスタンスを作成し、インスタンスにハンドルを提供してから、クラスではなくインスタンスにメッセージを送信する方がよいでしょう。

于 2012-07-30T15:42:34.920 に答える