2012-09-04 5 views
1

내 응용 프로그램에서 기본 스타일의 셀 동적 목록 tableview 있습니다. 각 셀의 textLabel은 xml에서 가져오고 공백 대신 밑줄을 포함합니다. didSelectRowAtIndexPath에서 어떤 셀을 탭했는지 식별하고 다른 XML 파일의 같은 문자열을 다른 항목과 비교하기 위해 레이블 텍스트를 사용합니다. 이 작업을하려면 레이블에 밑줄이 있어야하지만 대신 공백으로 표시되는 것이 좋을 것입니다.레이블에 공백으로 밑줄 표시

내 질문에 밑줄을 공백으로 표시하지만 기본 문자열의 밑줄을 그대로 유지하여 밑줄이 사용 된 xml과 일치하도록 labelText를 설정할 수 있습니까?

+0

테이블 뷰 컨트롤러의 아키텍처를 다시 생각해 보겠습니다. 표시되는 방식을 모델에 단단히 결합하면 안됩니다. 뷰 (테이블 뷰 및이 경우 셀)가 기본 표현과 관계없이 사용자가 이해할 수있는 표현으로 데이터 객체를 변형 할 수 있어야합니다. 데이터 색인을 추적하여이를 수행 할 수있는 방법이 있습니까? 즉, 셀을 탭할 때 인덱스 경로에서 원래 값을 찾을 수있는 정렬 된 배열의 데이터입니까? –

+0

NSXMLParser에서 읽으면서 MutableArray에 데이터를 저장합니다. 따라서 배열 인덱스를 사용하여 일치하는 셀의 태그에 인덱스를 저장하여 데이터에 액세스 할 수 있다고 생각합니다. 테이블의 셀을 사용하여 데이터를 다음보기로 전달하는 것은 좋지 않은 디자인이라는 것을 알고 있습니다. 조언 주셔서 감사합니다 @ CarlVeazey – ThunderHorse

+0

당신은 매우 환영합니다, 내가 당신을 도울 수 있다면 알려주. –

답변

3

labelText 표시를 원하는대로 만들 수 있습니다. tableView:cellForRowAtIndexPath:에서 밑줄을 공백으로 대체 한 문자열로 셀을 구성하면됩니다 (쉽게 수행하려면 stringByReplacingOccurrencesOfString:withString: 참조).

+0

감사합니다. stringByReplacingOccurrencesOfString을 사용합니다. – ThunderHorse

0

_을 공백으로 대체하는 새 문자열을 만들 수 있습니다. 이렇게하면 원본 문자열이 수정되지 않은 상태로 유지됩니다 (일반적으로 변경 불가능한 NSString이 아닌 NSMutableString).

self.labelText.text = [incomingString stringByReplacingOccurrencesOfString:@"_" withString:@" "]; 
1

XML에서 가져온 문자열 배열을 가질 수 있으며 레이블을 디스플레이 셀에 넣을 때 밑줄을 공백으로 필터링 할 수 있습니다. 아마 내가 어떻게 접근 할 것인가. 또는 그 문제에 대해, 당신은 문자열을 양방향으로 필터링 할 수 있지만 XML 파일에서 버전을 저장하는 것이 더 간단 할 것입니다. 필자의 의견입니다.

+0

이 옵션을 고려해 보았지만 stringByReplacingOccurrencesOfString을 사용하여 필요에 따라 문자열을 변경하면보다 세련된 솔루션이 될 것 같습니다. 제안한대로 어레이를 유지하는 것은 내가 잘못하면 좋은 대체 옵션입니다. – ThunderHorse

0

NSValueTransformer의 하위 클래스를 만들면 값 '%'에 '_'을 대신 적용 할 수 있지만 버튼의 stringValue가 값 변환기 옵션을 사용하여 바인딩 된 경우 모양이 변경됩니다.

이것은 버튼의 stringValue가 바인딩을 통해 설정되었다고 가정하고, 다른 대답은 텍스트가 수동으로 설정되었다고 가정합니다.

+0

iOS에서 바인딩을 사용할 수 있습니까? –

1

내 의견에 말했듯이 현재 디자인이 요구 사항에 최적이라고 생각하지 않지만 본질적으로 셀 레이블에 데이터를 저장하는 것 외에 다른 방법은 없다고 생각합니다. 그것은이 좋아 : 선택 콜백에서 다음

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)ip 
{ 
    /* instantiate cell here */ 
    NSString *cellText = /* however you need to get the cell text */; 
    cellText = [cellText stringByReplacingOccurrencesOfString:@"_" withString:@" "]; 
    cell.textLabel.text = cellText; 
    /* whatever other cell setup you need */ 
} 

:이 도움이

- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)ip 
{ 
    UITableViewCell *cell = [tv cellForRowAtIndexPath:ip]; 
    NSString *cellText = cell.textLabel.text; 
    cellText = [cellText stringByReplacingOccurrencesOfString:@" " withString:@"_"]; 
    /* go do whatever with cellText */ 
} 

희망을.