잠시 동안 문제없이 테이블에 사용자 정의 셀 (고유 한 닙)을 사용했습니다. 이제 새로운 프로젝트에서 더 많은 뷰를 유지하기 위해 제목, 버튼 및 다른 UIVIew가있는 재사용 가능한 사용자 정의보기 (셀이 아님)에 대한 필요성을 알게되었습니다. 나는 "제"를 부를 것이다 :iOS - 다른보기를 포함 할 수있는 사용자 정의보기
아이디어는 스토리 보드에서이 섹션 (UIView의를 사용하고 그에 따라 사용자 정의 클래스를 설정)을 사용할 수있게하는 것입니다. 그런 식으로 UIView 내부에 넣은 뷰는 내부 UIView에 실제로 포함될 것입니다.
실제로 어려운 부분은 IB와 Storyboard를 실제로 사용하여 뷰를 가져 와서 실제로 내부 UIView 대신 루트 UIView 섹션에 위치하게 될 것이라고 생각했습니다. 단지 내부 뷰가없는 사용자 정의보기를 만들면 예상대로 작동하지 않습니다.
#import "SectionContainer.h"
@implementation SectionContainer
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"SectionContainer" owner:self options:nil];
self = [nibArray objectAtIndex:0];
/*NSArray *nibRoot = [[UINib nibWithNibName:@"SectionContainer" bundle:nil] instantiateWithOwner:self options:nil];
[self addSubview:[nibRoot objectAtIndex:0]];*/
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
// Initialization code
NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"SectionContainer" owner:self options:nil];
self = [nibArray objectAtIndex:0];
/*NSArray *nibRoot = [[UINib nibWithNibName:@"SectionContainer" bundle:nil] instantiateWithOwner:self options:nil];
[self addSubview:[nibRoot objectAtIndex:0]];*/
}
return self;
}
일치하는 XIB는 루트 볼 수있다 : 여기 짓을했는지와 (일반의 UIView의 특정 초기화 방법에 따라 조정하지만) 일한 사용자 정의 세포의 수십 기반으로하는 코드입니다 (내가 정의 세포에서하는 것처럼)이 사용자 정의 클래스
인한 문제
이 사용자 정의 클래스 2 = A EXC_BAD_ACCESS 코드를 원인과 내가 단계별로 말할 수있는 것과, 그것이 마치의 설정 클래스는 재귀 적으로 호출되고 있습니다. initWithDecoder에 대한 호출이 된 후 EXC_BAD_ACCESS 오류가 나는 내가 그에게 XIB의 파일 소유자를 설정했다 다른 접근 방식을 시도 보이는 재귀 호출을 감안할 때
- 을 시도했다
를 발생할 때까지 호출 한 후 전화 XIB의 루트보기 대신 사용자 지정 클래스. 이성
'NSUnknownKeyException': '[setValue의 : forUndefinedKey :] :이 클래스는 약간 다른 방법을 시도 코딩 규격을 키 sectionContainerView
- 의 키 값이 없다를 이것은 다음과 같은 오류가 발생 (위의 코드에서 주석으로 처리 됨) XIB의 루트가 사용자 정의 클래스 (addSubView)에 설정되는 대신 추가됩니다. 이것은 동일한 재귀 호출 (또는 위의 오류가 설정되어있는 경우)을 변경하지 않았습니다.
정말 이에 대한 몇 가지 지침을 알려 주시면 감사하겠습니다. 고맙습니다.
안녕하세요, 답장을 보내 주셔서 감사합니다. 이게 진짜 대답입니까? 커스텀 뷰 컨트롤러는 별개의 기능 UI 요소를 분류하는 것과 유사하다고 생각했습니다. 예를 들어, 목록의 각 옵션에 표시된 컨텐츠와 목록을 분리하십시오. 내가 찾고있는 것은 단일 화면의 개별 콘텐츠를 둘러싼 반복적 인 래퍼입니다. 구체적인 예 : 기본 설명, 갤러리 미리보기, 연락처 목록, 주소 및 영업 시간과 같은 섹션이있는 비즈니스의 세부 정보가 담긴 화면. 주어진 스크린은이 섹션을 몇 개라도 가질 수 있습니다. – RobertoCuba
그것은 타협입니다. 문제는 배열로로드 할 수있는 nib 파일과는 달리 해당 배열에서로드 할 UIView를 체리로 선택할 수 있다는 점입니다. 스토리 보드 파일은 UIViewController를 루트 요소로 사용하여 전체 그림을 포함하도록 설계되었으며 모든 요소를 연결하는 경로는 하나의 파일. 로드 될 루트 VC가 무엇인지 정의하거나 스토리 보드 파일에서 임의의 VC를 사용자 지정로드 할 수 있지만 개별적으로로드 할 수있는 루트 요소로 단독으로 UIView를 배치 할 수는 없다고 생각합니다. –
아직도 나에게는 이상한 것처럼 보이지만 나는 이것을 조사 할 것이다. 그러나 논증의 목적으로이 사용자 정의보기 내부의 IB/Storyboard에 더 많은 뷰를 정의하려고하지 않았다고 가정합니다. 위의 코드가 내가 만든 모든 사용자 정의 셀에 대해 정상적으로 작동 할 때 왜 작동하지 않는지 알 수 있습니까? 나는 여전히 사용자 정의보기를 작동시키는 것을 잘못하고있다는 것을 알고 싶습니다. (다른 내용이있는 것을 염두에 두지 마십시오.) 답장을 보내 주셔서 다시 한 번 감사드립니다. – RobertoCuba