제스처 인식 기 가 있 는 XIB 파일 을 불 러 오 려 면 어떤 문제 가 필요 합 니까?
다음은 제스처 인식 기 가 있 는 XIB 파일 을 불 러 오 는 데 중요 한 문 제 를 알려 드 리 겠 습 니 다.
먼저 UIView 에서 계승 할 클래스 를 새로 만 들 고 해당 하 는 XIB 파일 을 만 듭 니 다.
#import <UIKit/UIKit.h>
@interface ZHDemoView : UIView
+ (instancetype)demoView;
@end
현재 클래스 를 빠르게 만 들 수 있 도록 클래스 방법 을 제공 합 니 다.m 에서 클래스 를 실현 하 는 방법 은 보통 XIB 에서 하나의 배열 을 불 러 오기 때문에 lastObject 방법 을 사용 합 니 다.
+ (instancetype)demoView
{
NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"ZHDemoView" owner:nil options:nil];
return [nibArray lastObject];
}
awakeFromNib
- (void)awakeFromNib
{
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(click)];
[self addGestureRecognizer:tap];
}
- (void)click
{
NSLog(@"%s", __func__);
}
또한 테스트 용 XIB 는 이렇게 생 겼 습 니 다.루트 컨트롤 러 에 이러한 View 를 추가 하고 실행 하고 클릭 합 니 다.
결국
2015-08-11 13:44:44.988 XIB
주의 하 다.
[1797:362096] -[ZHDemoView click]
모든 것 이 정상 입 니 다.그 다음 에 우 리 는 코드 에 제스처 를 추가 하지 않 고 XIB 에 직접 추가 합 니 다.(이전에 제스처 를 추가 한 코드 가 제거 되 었 습 니 다)
실행 결과:
2015-08-11 14:02:12.747 XIB
주의 하 다.
[1962:374487] -[UITapGestureRecognizer superview]: unrecognized selector sent to instance 0x7fe47af49c60
메시지 전송 오류 임 을 알 수 있 습 니 다.UITapGesture Recognizer 에는 슈퍼 뷰 방법 이 없습니다.
이 그림 으로 돌아 가.
Objects 표시 줄 아래 에 제스처 인식 기와 DemoView 두 대상 이 있 는 것 을 볼 수 있 습 니 다.XIB 가 불 러 온 대상 이 잘못 되 었 기 때 문 일 수 있 습 니까?
이전에 제 공 된 클래스 방법 중 에 lastObject 방법 을 사 용 했 기 때문에 이번 에는 firstObject 를 사용 해 보 겠 습 니 다.
클래스 변경 방법 은 다음 과 같 습 니 다.
+ (instancetype)demoView
{
NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"ZHDemoView" owner:nil options:nil];
return [nibArray firstObject];
}
결과:2015-08-11 14:13:16.847 XIB
주의 하 다.
[2064:382058] -[ZHDemoView click:]
모든 것 이 정상이다.
요약:
XIB 에서 불 러 온 것 은 하나의 대상 배열 입 니 다.일반적인 상황 에서 우 리 는 하나의 대상 만 사용 해 야 합 니 다.이때 firstObject 나 lastObject 를 사용 해도 됩 니 다.하지만 제스처 인식 기 를 사용 하려 고 할 때 꺼 낸 대상 을 잘못 알 지 마 세 요.XIB 에 제스처 인식 기 를 직접 추가 하지 말고 코드 를 통 해 수 동 으로 만 드 는 것 이 더 안전 하고 유지 하기 쉬 운 것 을 권장 합 니 다.
이상 은 제스처 인식 기 가 있 는 XIB 파일 을 불 러 오 는 데 주의해 야 할 문 제 를 소개 하 며 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.