펜촉을 올바르게로드하여 사용자 정의 된 uiscrollview 하위 클래스를 올바르게 만들려면 어떻게해야합니까?
-
08-07-2019 - |
문제
나는 내 펜촉 안에 멋진 uiscrollview를 가지고 있었는데, 그것은 잘 작동했습니다. 그런 다음 매우 특별한 요구와 Uiscrollview를 서브 클래스를 가졌습니다. 내 펜촉에서, 나는 Identity Inspector의 수업을 내 서브 클래스로 변경했습니다.
그러나 어떤 이유로, 내 -initwithframe : nib 로더가 펜촉에서 모든 객체를 빌드 할 때 메소드가 호출되지 않습니다. 사실 나는 지금 내 서브 클래스에서 아무것도 바꾸지 않았습니다. 그리고 스크롤보기는 잘 작동합니다. NIB에 말하더라도 빈 Uiscrollview가 테스트 목적으로 특수화 된 Uiscrollview 인 것 같습니다.
UiscrollView를 서브 클래스 할 때 고려해야 할 사항이 있습니까? 여전히 NIB 파일을 사용하여 원근법으로 가져 오는 것이 있습니까?
전용 이니셜 라이저는 다음과 같습니다.
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
NSLog(@"Hello !!!!!!!!!!!!!");
}
return self;
}
나는 펜촉에서 그것을로드하려고한다면 콘솔에서 그 인사를 결코 보지 못합니다. 물론, 내가 혼자서 그것을 할당하고 초기화한다면, 그것은 작동합니다. 그러나 대신 그 멋진 인터페이스 빌더를 사용할 수 있다면 스크롤보기를 프로그래밍 방식으로 배치하고 싶지 않습니다.
해결책
NIB 또는 XIB의 객체는 직렬화 된 물체로 저장되므로 사용해야 함을 의미 할 수 있습니다. awakeFromNib
초기 메소드가 호출되지 않기 때문에 방법.
다른 팁
연장하다 initWithCoder
, 슈퍼 방법을 호출하십시오. 이 슈퍼 호출 중에 있습니다 setFrame
수업에서 호출됩니다.
그런 다음 표준을 재사용 할 수 있습니다 initWithFrame
전화로 initWithCoder
, 인터페이스 빌더는 프레임 크기를 제어합니다.
- (id)initWithCoder:(NSCoder *)aDecoder {
[super initWithCoder:aDecoder]; // Required. setFrame will be called during this method.
return [self initWithFrame:[self frame]];
}