Tôi có textView trong ô của mình và đôi khi trong khi xem bảng di chuyển một số cuộc gọi lạ xảy ra. Hệ thống thực hiện trả lời đầu tiên của textView của tôi. Tôi đã tìm thấy những cuộc gọi không mong muốn làm hành vi:Đối tượng ghi đè mục tiêu-c với loại hậu duệ của nó
#0 -[UITextView canBecomeFirstResponder]()
#1 -[UIView(Hierarchy) deferredBecomeFirstResponder]()
#2 -[UIView(Hierarchy) _promoteDescendantToFirstResponderIfNecessary]()
tôi không thể tìm ra lý do tại sao được những kêu gọi, vì vậy tôi đã cố gắng để đối phó với điều này bằng cách mở rộng UITextView
và trọng - canBecomeFirstResponder
.
Đây là .h của tôi:
#import <UIKit/UIKit.h>
@protocol TextViewDelegate;
@interface TextView : UITextView
@property (nonatomic, assign) id<TextViewDelegate> delegate;
@end
@protocol TextViewDelegate <UITextViewDelegate>
- (BOOL)canBecomeFirstResponder:(TextView *)textView;
@end
Và .m:
#import "TextView.h"
@implementation TextView
@synthesize delegate;
- (BOOL)canBecomeFirstResponder
{
return [self.delegate respondsToSelector:@selector(canBecomeFirstResponder:)] ? [self.delegate canBecomeFirstResponder:self] : NO;
}
@end
Giải pháp này hoạt động nhưng trên dòng @property (nonatomic, assign) id<TextViewDelegate> delegate;
Tôi đã có cảnh báo và tôi không biết tại sao. Nó nói Property type 'id<TextViewDelegate>' is incompatible with type 'id<UITextViewDelegate>' inherited from 'UITextView'
.
Vậy tại sao hệ thống muốn thực hiện trả lời đầu tiên của textView nếu tôi không? Tại sao tôi nhận được cảnh báo này? Có giải pháp tốt hơn tôi?
Tôi đã cố gắng để thiết lập thuộc tính có thể chỉnh sửa điều này, nhưng nó cũng có 'inputAccessoryView' nên khi nó trở nên trả lời đầu tiên này 'inputAccessoryView' lãm. Tôi chỉ muốn kiểm soát việc trở thành người trả lời đầu tiên về vật thể này. Dù sao, bạn là chính xác với câu trả lời của bạn. Điều đó với trình biên dịch trước không được cải thiện là đáng xấu hổ ... – user500