2009-06-20 5 views
3

UITableView에 확인란을 넣는 데 문제가 있습니다. 나는 여기에 내 코드의 일부를 게시하고있다.테이블 뷰의 CheckBox

- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 
{ 
    NSButtonCell *cell=[[NSButtonCell alloc] init]; 
    NSString *strDisplayPlaylistName; 
    strDisplayPlaylistName=[playListNameArray objectAtIndex:row]; 
    [cell setTitle:strDisplayPlaylistName]; 
    [cell setAllowsMixedState:YES]; 
    [cell setButtonType:NSSwitchButton]; 
    return cell; 
} 


- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {   
    NSCell *aCell = [aTableColumn dataCellForRow:rowIndex]; 
    [aCell setNextState]; 
    //NSCell *aCell=[aAddedCells objectAtIndex:rowIndex]; 
    //[aCell setNextState]; 
} 

UITableView 내에 체크 박스가 있습니다. 하지만 문제는 버튼을 선택 취소 할 수 없다는 것입니다. 할 일이 더 많습니까? 나는 코코아 프로그래밍에 익숙하지 않다.

답변

4

몇 가지 중요한 부분이 누락되었습니다. tableValue : setObjectValue : forTableColumn : row : 메시지에 대한 응답으로 모델 (데이터 구조)을 업데이트해야 tableView : objectValueForTableColumn : row : 메소드에서 새 값을 올바르게 반환 할 수 있습니다.

다음은 'myRows'배열에 'booleanAttribute'속성이있는 객체가 채워져 있다고 가정하는 일부 테이블 데이터 소스 메소드입니다.

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { 
    return [myRows count]; 
} 

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 
    BOOL value = [[myRows objectAtIndex:row] booleanAttribute]; 
    return [NSNumber numberWithInteger:(value ? NSOnState : NSOffState)]; 
} 

- (void)tableView:(NSTableView *)tableView setObjectValue:(id)value forTableColumn:(NSTableColumn *)column row:(NSInteger)row {   
    [[myRows objectAtIndex:row] setBooleanAttribute:[value booleanValue]]; 
} 

또한 인터페이스 빌더에서 표 셀을 설정해야합니다. 표준 확인란과 같이 구성된 단추 셀을 테이블 열 중 하나에 직접 끌어 올 수 있습니다.

2

왜 코드에서 셀을 생성하는지 잘 모르겠습니다. Interface Builder에서 테이블 열로 셀을 끌기 만하면됩니다.

또한 setObjectValue :는 셀 상태의 변경에 응답합니다. 사용자가 이미 셀의 상태를 꺼짐으로 변경했습니다. 그런 다음 setNextState을 보내고 다시 변경하십시오. 그래서 셀이 선택 취소 된 것처럼 보이지 않습니다. 셀을 다시 확인합니다.

당신이해야 할 일은 셀을 전혀 건드리지 않고 객체 값을 설정하는 것입니다 (이 열에 대해서는 YES 또는를 포함하는 부울 NSNumber 임). 해당 속성의 새 값으로 귀하의 모델.

물론 열이 편집 가능으로 설정되어 있는지 확인하십시오.

2

NSTableView 콘텐츠 모드가 "셀 기반"으로 설정된 경우 확인란을 이동할 때 "보기 기반"이됩니다.

관련 문제