2010-01-11 3 views
1

NSTreeController에서 데이터를 바인딩을 통해 표시하는 NSTableView가 있습니다. 응용 프로그램은 바운드 배열에 데이터를 자주 추가/변경합니다.NSTableView. 자동 스크롤 동작을 재정의하는 방법?

사용자가 테이블에서 행을 선택했지만 선택한 데이터가 더 이상 보이지 않도록 스크롤 한 경우 응용 프로그램에서 배열을 업데이트하면 디스플레이가 자동 스크롤되도록하여 선택한 회선이 다시 화면에 나타납니다. 이것은 특히 사용자가 새로운 데이터가 언제든지 도착할 수 있기 때문에 상당히 불쾌합니다 ( ).

이 기능을 사용 중지 할 수있는 방법이 있습니까?

답변

2

NSTableView을 서브 클래스 화하고 에 일시적으로 대괄호로 묶어 -scrollRowToVisible:을 재정의해야 할 수 있습니다. 또한 스크롤하려는 여부를 추적하기 위해 하위 클래스에 사용자 정의 BOOL ivar이 필요합니다.

정확히 자동 스크롤이 트리거되는 시점을보기 위해 중단 점을 설정하는 것으로 시작합니다. 이것은 ivar을 토글하는 적절한 순간을 찾는 데 도움이됩니다.

+0

내가 아는 한, Costique의 솔루션은 현재이 문제를 해결할 수있는 유일한 방법입니다. 불행한 점은'-scrollRowToVisible :'을 오버라이드하고 super의 구현을 호출하지 않는다면 다른 것들이 깨질 것이기 때문이다. 필자의 경우 네트워크 코드를 수정하여 클래스 메소드'+ isInsertingNewDataFromRemote'를 추가 한 다음 사용자 정의 테이블 뷰가'-scrollRowToVisible :'에서 해당 플래그를 확인하도록하고 그 플래그가'NO' 인 경우에만 super 구현을 호출해야합니다. . – Mason

0

NSOutlineView 또는 NSArrayControllerNSTableView과 함께 NSTreeController을 사용하고 있습니까? NSTreeControllerNSTableView과 함께 사용하면 나에게 많은 의미가 없습니까?

NSTableView을 사용하는 경우 해당 데이터를 관리하려면 NSArrayController을 사용해야하며 행의 정렬은 NSArrayController의 기능입니다. IB 내의 컨트롤러에서 자동 재정렬 콘텐츠 옵션을 해제하십시오.

배열이 켜져 있으면 배열 컨트롤러는 정렬 순서 (있는 경우)에 영향을 줄 수있는 객체 추가, 제거 및 변경시 객체를 재정렬하고 테이블보기 또는 개요보기에서 데이터를 다시로드하게합니다.

NSTreeController의 비슷한 기능에 대해서는 잘 모릅니다. 왜냐하면 나에게 잘 돌아 가지 않았기 때문에 사용하지 않았기 때문입니다. 안타깝게도 NSOutlineView에 데이터 소스 메서드를 사용하고 데이터를 구식으로 제공하는 것이 좋습니다. 내 경험상 NSTreeController은 가장 사소한 작업에만 적합합니다.

+0

NSTreeController는 10.7에서 많이 향상되었습니다. 이전 릴리스보다 훨씬 유용합니다. – Mason

관련 문제