gpt4 book ai didi

ios - iphone中未调用UIAlertView委托(delegate)方法

转载 作者:行者123 更新时间:2023-12-01 17:13:43 25 4
gpt4 key购买 nike

我正在开发一个应用程序,我有一个要求,即当有来电时调用相应的方法。我编写了alertview代码,它完美地工作并显示了alertview。

Alertview 包含两个按钮接受和拒绝,当我单击这些按钮中的任何一个时,不会调用 alertview 委托(delegate)方法。

+ (void)incomingCallAlertView:(NSString *)string
{
UIAlertView *callAlertView=[[UIAlertView alloc] initWithTitle:string message:@"" delegate:self cancelButtonTitle:@"reject" otherButtonTitles:@"accept",nil];
[callAlertView show];
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{

NSLog(@"clickedButtonAtIndex");

if(buttonIndex==0)
{
NSLog(@"buttonindex 0");
}
else
{
NSLog(@"buttonindex 1");
}

}

我调用 +(void)incomingcall使用主线程的另一种方法中的方法。
- (void)showIncomingcalling
{
[CallingViewController performSelectorOnMainThread:@selector(incomingCallAlertView:) withObject:@"on_incoming_call" waitUntilDone:YES];
}

我在类里面写协议(protocol),即 <UIAlertViewDelegate>但是没有调用委托(delegate)方法,任何人都可以提前解决我的问题。

最佳答案

initWithTitle:string message:@"" delegate:self
^^
Here it is!

在类方法的上下文中, self指的是类本身,而不是对象的实例(类方法如何知道类的实例?)。所以你必须要么制作 incomingCallAlertView:方法转换为 实例方法 (即在它前面加上减号而不是加号,并在 self 方法中调用类名的 showIncomingCalling insetad),或者像实现类方法一样实现委托(delegate)方法:
+ (void)alertView:(UIAlertView *)av clickedButtonAtIndex:(NSInteger)index

(这个 确实有效 因为类对象本身就是它的元类的一个实例,这意味着类方法实际上只是元类的实例方法。)

等等

顺便说一句,仔细阅读一个体面的 Objective-C 教程和/或语言引用。这个问题不应该在这里问,因为它太基础了,无法在其他资源中查找。

关于ios - iphone中未调用UIAlertView委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12859020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com