0

我在 iOS 上有一个 C++ 项目。它主要使用 C++,除了一些需要 Objective-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
Then have an static var YourClaas *delegate;in it

+ (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 回答