Objective-c重写委托及其子类型

Objective-c重写委托及其子类型,objective-c,ios,cocoa-touch,delegates,first-responder,Objective C,Ios,Cocoa Touch,Delegates,First Responder,我的手机里有textView,有时候在tableView滚动时会发生一些奇怪的呼叫。系统使我的文本视图成为第一响应者。我发现这些电话会造成不必要的行为: #0 -[UITextView canBecomeFirstResponder] () #1 -[UIView(Hierarchy) deferredBecomeFirstResponder] () #2 -[UIView(Hierarchy) _promoteDescendantToFirstResponderIfNecessary] ()

我的手机里有textView,有时候在tableView滚动时会发生一些奇怪的呼叫。系统使我的文本视图成为第一响应者。我发现这些电话会造成不必要的行为:

#0 -[UITextView canBecomeFirstResponder] ()
#1 -[UIView(Hierarchy) deferredBecomeFirstResponder] ()
#2 -[UIView(Hierarchy) _promoteDescendantToFirstResponderIfNecessary] ()
我无法找到调用这些的原因,因此我尝试通过扩展
UITextView
并重写
-canBecomeFirstResponder
来解决这个问题

这是我的。h:

#import <UIKit/UIKit.h>

@protocol TextViewDelegate;

@interface TextView : UITextView

@property (nonatomic, assign) id<TextViewDelegate> delegate;

@end

@protocol TextViewDelegate <UITextViewDelegate>

- (BOOL)canBecomeFirstResponder:(TextView *)textView;

@end
此解决方案在
@property(非原子,赋值)id委托行工作我收到了警告,我不知道为什么。它表示
属性类型“id”与从“UITextView”继承的类型“id”不兼容。


那个么,若我并没有,为什么系统要让textView成为第一响应者呢?为什么我会收到这个警告?有比我的更好的解决方案吗?

我不确定,但我怀疑警告是因为预编译器知道
TextViewDelegate
,但它还不知道此协议正在继承
UITextView
协议。只需在上面这样声明:

@class TextView;

@protocol TextViewDelegate <UITextViewDelegate>

- (BOOL)canBecomeFirstResponder:(TextView *)textView;

@end

@interface TextView : UITextView

@property (nonatomic, assign) id<TextViewDelegate> delegate;

@end
@class TextView;
@协议文本视图代理
-(BOOL)可以成为第一响应者:(TextView*)TextView;
@结束
@接口TextView:UITextView
@属性(非原子,赋值)id委托;
@结束
但我不确定我是否理解这个问题。 您有一个表,在一个/多个/每个单元格中有一个
UITextView
,对吗? 是否希望文本视图可编辑? 因为您可以简单地设置
[textView setEditable:FALSE]

希望这有帮助

问候,


George

我曾尝试设置此可编辑属性,但它也有
inputAccessoryView
因此当它成为第一响应者时,此
inputAccessoryView
显示。我只是想控制自己成为这个物体的第一反应者。无论如何,你的答案是正确的。没有信息的预编译程序真是太可惜了。。。
@class TextView;

@protocol TextViewDelegate <UITextViewDelegate>

- (BOOL)canBecomeFirstResponder:(TextView *)textView;

@end

@interface TextView : UITextView

@property (nonatomic, assign) id<TextViewDelegate> delegate;

@end