2011-04-12 3 views
0

안녕하세요! 테이블 뷰를 작성하고 배열 객체로 채우고 사용자가 내 테이블 뷰 내에서 객체를 클릭하면 객체의 nib 파일을로드하고 if 문을 사용할 때 코드를 구현했습니다. (약간의 메모, 필자는 40 개의 객체로 표보기를 채 웠습니다. 그 이유는 필자가 가지고 있고 필요로하는 것이기 때문에) if 문 시작 부분에 작성한 처음 두 문장 만 표시합니다. 내 테이블에 모든 40 개체에 대한 문이 경우 너무 많은 :didSelectRowAtIndexPath 내 코드를 더 쉽게 코드로 단축하는 데 도움이됩니다.

if ([[glossaryArray objectAtIndex:indexPath.row] isEqual:@"Title"]) { 
    Title *titleLoad = [[Title alloc] initWithNibName:@"Title" bundle:nil]; 
    [self.navigationController pushViewController:titleLoad animated:YES]; 
    [titleLoad release]; 
    } 
    else if ([[glossaryArray objectAtIndex:indexPath.row] isEqual:@"Meta Description Tag"]) { 
     MetaDescriptionTag *metaDescriptionTagLoad = [[MetaDescriptionTag alloc] initWithNibName:@"MetaDescriptionTag" bundle:nil]; 
     [self.navigationController pushViewController:metaDescriptionTagLoad animated:YES]; 
     [metaDescriptionTagLoad release]; 
    } 
... 

그래서 그것입니다, 내 경우 문을 모두 보여주는 자만하지 않기 때문에이 코드가 작동 네, 각 배열 객체는 그것의 로딩 각각의 nib 파일 (각각의 배열 객체에 대해 40 개의 nib 파일 1)을 소유하고 이들 nib 파일 각각은 웹 뷰, 이미지 뷰, 텍스트 필드 및 기타 객체와 같습니다. 나를 미친,하지만 이것은 지금 생각할 수있는 유일한 코드입니다, 그래서 누군가가이 코드를 훨씬 더 쉬운 코드로 편집하도록 도울 수 있습니다.

+0

배열과 변수는 친구입니다. 엔트리의 배열을 정의 할 수 있으며 ifs 내부 코드의 2/3을 제거하는 UIViewController * var를 정의 할 수 있습니다. – jv42

답변

2

glossaryArray의 값을 기계적으로 해당 클래스 (모든 공백을 제거하여 예)/펜촉 이름은 당신이 뭔가를 할 수 있습니다 : 그들은 기계적으로 변환 할 수없는 경우

NSString *className = [self classNameFromString:[glossaryArray objectAtIndex:indexPath.row]]; 
UIViewController *viewController = [[NSClassFromString(className) alloc] initWithNibName:nil bundle:nil]; 
[self.navigationController pushViewController:viewController animated:YES]; 
[viewController release]; 

, 당신은 항상 다른, 또는 특별 한에서 NSDictionary에 매핑을 구성 할 수 다른 몇 가지 경우. 또는 클래스와 닙의 이름을 바꿉니다.

+0

감사합니다! 이제 코드를 분석 한 후 작동하게되었습니다! – PatrickGamboa

관련 문제