返回在UIAlertView上按下按钮的结果给c++方法
Returning result of button pressed on UIAlertView to C++ method
我需要调用一个UIAlertView从一个c++文件显示。根据按下的按钮,我需要向c++类本身返回一个bool值(该bool值反过来被返回并在其他地方使用)。我想要一些关于如何将结果返回到c++类的建议。我已经假定我们不能将c++类设置为UIAlertView的委托,所以我需要以某种方式将哪个按钮按回c++类。
这是来自c++的函数调用示例(它是一个c++类,但编译为Objective-C:
bool CPlatform::WarningMessage(const wchar_t* message)
{
// Some functions to convert message to an NSString* wNSString
MessagePopUp *message = [[MessagePopUp alloc] init];
[message showPopUpWithMessage:wNSString];
// This function should return true if OK is pressed, or False if Cancel is pressed.
}
然后,我有一个简单的类来显示警报
@interface MessagePopUp : NSObject <UIAlertViewDelegate> {
BOOL OKPressed;
}
- (void) showPopUpWithMessage:(NSString*)message;
@end
@implementation MessagePopUp
- (void) showPopUpWithMessage:(NSString*)message
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning" message:message delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
[alert show];
[alert release];
}
- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
// the user clicked one of the OK/Cancel buttons
if (buttonIndex == 0)
{
NSLog(@"ok");
OKPressed = true;
}
else
{
NSLog(@"cancel");
OKPressed = false;
}
}
@end
你能推荐一种方法,我可以返回结果/OKPressed到c++函数?
谢谢
考虑代码流程会告诉您,这不是那么容易做到的。
问题是运行循环和UIAlertView是非阻塞显示alertView(即调用[alert show]
后),你需要返回控制到iOS,这意味着你的c++函数bool CPlatform::WarningMessage(const wchar_t* message)
必须返回之前,你知道哪个按钮被按下。
你可以尝试建立一个阻塞UIAlertView,但这不是一个好主意,即使这种类型的事情是可能的。
一个更好的主意是在你的c++ CPlatform
类中定义一个回调,它接受你在clickedButtonAtIndex
委托方法中的OKPressed
bool值。
如果你可以混合这两种语言,那么你可以使用objective-c中一个叫做NSNotificationCenter的概念。
下面的代码为"show the alert"类的父类添加了一个监听器:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(MethodYouWantToUseWhenClicked)
name:@"alertViewClicked"
object:showAlertClass];
然后在alert视图类中,您可以执行以下操作来发送消息:
- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
// the user clicked one of the OK/Cancel buttons
if (buttonIndex == 0)
{
// Not sure, but I think buttonIndex == 0 is actually cancel.
NSLog(@"cancel");
self.OKPressed = false;
[[NSNotificationCenter defaultCenter] postNotificationName:@"alertViewClicked"
object:self];
} else {
self.OKPressed = false;
[[NSNotificationCenter defaultCenter] postNotificationName:@"alertViewClicked"
object:self];
}
}
那么你只需要从你的父类/c++中访问布尔属性。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- 用C++20 fmt限制结果的总大小
- 如何返回一个类的两个对象相加的结果
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 序列化,没有库的整数,得到奇怪的结果
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 在更改for循环的第三部分后,未使用for循环结果
- 使用++运算符会导致意外的结果
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- C++Brute Force攻击函数不会返回结果
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 算术运算的结果类似于:C浮点变量中的1/3
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 密码登录程序将永远循环并显示不正确的结果
- 如何让C++'tally up'结果并制定计划?
- 为什么这个程序的结果是3 "born"?和 4 死
- 尝试将字符串/字符转换为整数会产生意外结果