2011-01-19 2 views

답변

0

outlineview : child : ofItem :에 대한 NSIndexPath를 반환하도록 데이터 소스를 변경했습니다. 이렇게하면 [outlineview rowAtPoint : point] (및 유사)를 사용하여 NSIndexPath를 얻을 수 있습니다.

이러한 변경으로 인해 이러한 indexPath가 필요하지 않을 때까지 릴리스되지 않도록 이러한 indexPath 세트를 만들어야했습니다. 또한 일반적으로 모델 객체를 예상하는 다른 모든 코드는 이제 인덱스 경로에서 모델 객체를 조회해야합니다. 제 경우에는 이것이 효율적이었습니다. 범위의

NSScrollView* scrollView = [self.tableView enclosingScrollView]; 

CGRect visibleRect = scrollView.contentView.visibleRect; 

NSRange range = [self.tableView rowsInRect:visibleRect]; 

첫 번째 눈에 보이는 세포로 위치를 얻을 것이다 길이 세포의 양이 그래서 당신은 눈에 보이는 세포의 인덱스를 알 수있는 표시됩니다 :

+0

여전히 indexPathsForVisibleRows에 해당하는 것이 있으면 좋겠다. – Cal

13

NSOutlineViewNSTableView 서브 클래스 (NSArray를 *) indexPathsForVisibleRows -

[편집] 은 내가 실제로 찾고 있어요 CocoaTouch/jQuery과에 NSOutlineView에 해당합니다. 따라서 -rowsInRect:-visibleRect (NSView)과 결합 할 수 있습니다. 레벨을 결정하려면 -levelForRow:을 사용하십시오.

+0

당신이 수를 행하도록 계산 모델을 반복 할 것처럼 보인다. 나는 선형 시간을 정말로 원하지 않는다. 내가 놓친 게 아니라면? – Cal

+0

무슨 뜻인지 모르겠습니다. itemForRow : 등을 통해 행을 실제 객체로 변환 할 수 있습니다. –

+0

죄송합니다 ... 제 질문에 대한 설명이 충분하지 않았습니다. 실제로 보이는 행에 대해 트리 좌표를 가져올 수 있어야합니다. 예를 들어 내 경우에는 트리가 두 레벨을 가지므로 리프 노드에 두 개의 인덱스가 있습니다. – Cal

22

는 다음을 수행 할 수 있습니다 .

+1

좋은 답변입니다! 그리고 나서 반복합니다. [self.tableView itemAtRow : range.location] – stevesliva

+0

스크롤 뷰의 불필요한 개입 외에도 거의 2 년 반 전에 게시 한 답변과 다른 점은 확실하지 않습니다. 직접'-visibleRect'를 위해) 그리고 OP가 아웃 라인 뷰 (트리) 대 테이블 (리스트)에 대해 묻고 있다는 사실 ... –

+2

@JoshuaNozzi는 코드 읽기가 쉽다. –

0

3 스위프트 에서 :

let rows = IndexSet(integersIn: 0..<outlineView.numberOfRows) 
let rowViews = rows.flatMap { outlineView.rowView(atRow: $0, makeIfNecessary: false) as? TimelineRowView } 

for rowView in rowViews 
    //iterate over rows 
} 
관련 문제