UITextView 类中未调用 UIAlertView 委托方法

Posted

技术标签:

【中文标题】UITextView 类中未调用 UIAlertView 委托方法【英文标题】:UIAlertView Delegate method not called in UITextView Class 【发布时间】:2014-07-10 04:29:13 【问题描述】:

我想在UITextView Class 上打电话给didDismissWithButtonIndex,但没有打电话。 我还在MyViewcontroller.h 文件和[alert setDelegate:self] 方法上实现UIAlertViewDelegate

那么可以在UITextView Class 中调用UIAlertView Delegate 方法吗??

+ (void)deleteTextr:(UITapGestureRecognizer *)gestureRecognizer

    if (gestureRecognizer.state == UIGestureRecognizerStateBegan)
    
        UIAlertView *alert  = [[UIAlertView alloc]initWithTitle:@"" message:@"Delete Text !!!!" delegate:self cancelButtonTitle:@"Delete" otherButtonTitles:@"No", nil];
        [alert setDelegate:self];
        [alert show];
    

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex

    if(buttonIndex == 1)
    
        [self removeFromSuperview];
    

【问题讨论】:

在 clickedatbuttonindex 中尝试 didDismissWithButtonIndex 类中调用的非 UIAlertView 委托方法。 为什么你的deleteTextr:方法是类方法而不是实例方法? 【参考方案1】:

只需将委托方法更改为类方法。像这样:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex;

// - 改为+

+ (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex;

【讨论】:

【参考方案2】:

deleteTextr: 是一个类方法。在类方法的上下文中,self 只是对类的引用。要使用 UIAlertViewDelegate 协议,您需要将类的实例分配给 UIAlertView 实例的委托属性,这只能在实例方法中完成。

阅读this 以更好地掌握上述概念。

【讨论】:

使用self 作为类引用作为委托是完全有效的。这不是典型的,但它确实有效。当然,委托方法必须是类方法才能工作。

以上是关于UITextView 类中未调用 UIAlertView 委托方法的主要内容,如果未能解决你的问题,请参考以下文章

UITextView 对象在新控制器中未被识别

iOS - 无法访问 UITableViewCell 类中的 UITextView 委托

从UITableViewCell类中获取UITextView中的hashtag后尝试进行segue

泛型类中未使用的类型参数

python类中未定义函数名[重复]

类中未定义的函数或变量