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 委托方法的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 无法访问 UITableViewCell 类中的 UITextView 委托