2010-08-18 3 views
1

NSTableView는 하나의 열에 NSTableViewDataSource 메서드 (바인딩이 포함되지 않음)가 채워져 있습니다. NSTableView는 NSScrollView 내부에 있으며 인터페이스 작성기의 라이브러리에서 NSTableView를 드래그하면 기본 동작이됩니다. 테이블 뷰의 내용은 사용자가 입력 한 검색 문자열을 기반으로 채워지며 그 시점 이후에는 변경되지 않습니다.NSTableView가 선택 항목으로 건너 뜁니다 ... 왜?

난 단지 데이터 소스 프로토콜이 두 가지 방법을 구현하고있다 :

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView; 
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row; 

내 검색 문자열을 입력 한 후 초점은 NSTextField있는 아직,하지만 나는 자연스럽게 내 마우스의 스크롤 휠과의 tableview를 스크롤 할 수 있습니다 스크롤 막대의 화살표와 함께 테이블 뷰가 포커스 링을 수신하지도 않습니다. 그러나 내가 아래로 스크롤하여 테이블 뷰의 맨 위에 있지 않은 상태에서 테이블 뷰의 개별 행을 강조 표시하려면 테이블 뷰가 위로 이동 한 다음 그 시점에서 내 마우스 아래있는 행을 선택합니다 . 그 지점 다음에 행을 클릭하면 예상대로 작동합니다.

즉, NSTableView에 포커스 링이있는 경우 행을 클릭하면 예상되는 행이 강조 표시됩니다. 주위에 포커스 링이없는 경우 행을 클릭하면 맨 위로 스크롤 한 후 그 위치에있는 행이 선택됩니다.

어떤 통찰력이라도 있습니까? Snow Leopard를 사용하고 있지만 Leopard를 실행하고있을 때 일어난 것 같습니다.

답변

2

NSTextField 검색에 포커스가 없으면 테이블보기에서 reloadData (또는 비슷한 방법)을 실행하여보기를 비 웁니다 (스크롤 위치를 맨 위로 다시 설정 한 다음 다시 채우는 것) 할 수 있습니까? 그것은 즉시?

+0

오 ... 당신은 절대적으로 옳습니다! 텍스트 필드를 "보내기 만 할 때 보내기"대신 "최종 편집시 보내기"로 설정했습니다. 결과적으로, 내가 tableview를 클릭했을 때 검색을 다시 실행하고있었습니다. 내가 tableview를 클릭하기 전에 "검색"버튼으로 탭하면 예상대로 작동합니다. 감사합니다. –

0

한 번 비슷한 버그가 있었는데 원인은 내 창 컨트롤러가 awakeFromNib를 처리하고 목록에 스크롤 위치를 설정하여 처음로드되었을 때 올바른 위치에 놓이게했기 때문입니다. 그러나 필자는 마침내 awakeFromNib 메시지를 필요에 따라 생성 된 펜촉 테이블 뷰 셀에서 가져 오는 중임을 알았습니다. 스크롤하면 스크롤하는 동안 예기치 않게 테이블 스크롤 값이 엉망이되었습니다. 내 수정은 창 컨트롤러가 첫 번째 awakeFromNib를 처리 할 때 스크롤 위치 만 설정하도록하는 것이 었습니다.

관련 문제