2017-12-14 24 views
6

키보드 전용 사용자가 ScrollView에서 다른 UI 요소 사이를 탐색하려고 할 때 어떻게하면 자동으로 scrollView를 스크롤 할 수 있는지 알려주실 수 있습니까? 'Tab'키? "TAB"키를 누르면 스크롤 뷰에있는 다른 UI 요소로 포커스가 이동하지만 보이는 요소 뷰에 UI 요소가 없으면 스크롤하지 않습니다. 이것이 어떻게 달성 될 수 있는가. 도움을 주시면 감사하겠습니다. 감사.접근성 : ScrollView를 사용하여 "TAB"을 치면 볼 수없는보기로 자동 스크롤

+0

코드로 스크롤 하시겠습니까? 뭐 해봤 니? – Willeke

+0

예. 뷰가 포커스를 얻고 scrollView의 보이는 영역에 없을 때마다 스크롤이 자동으로 수행되기를 원합니다. 'autoscroll :'시도를 실패했습니다. 나는 무엇을 해야할지 전혀 모른다. 당신이 내 요구 사항을 가지고 있기를 바랍니다. 의견을 부탁합니다. –

+0

'[view scrollRectToVisible : view.bounds]'를 사용해보십시오. – Willeke

답변

3

솔루션 A : NSWindow의 하위 클래스를 만들고 makeFirstResponder:을 재정의하십시오. makeFirstResponder은 첫 번째 응답자가 변경 될 때 호출됩니다.

- (BOOL)makeFirstResponder:(NSResponder *)responder { 
    BOOL madeFirstResponder = [super makeFirstResponder:responder]; 
    if (madeFirstResponder) { 
     id view = [self firstResponder]; 
     // check if the new first responder is a field editor 
     if (view && [view isKindOfClass:[NSTextView class]] && [view isFieldEditor]) 
      view = [view delegate]; // the control, usually a NSTextField 
     if (view && [view isKindOfClass:[NSControl class]] && [view enclosingScrollView]) { 
      NSRect rect = [view bounds]; 
      rect = NSInsetRect(rect, -10.0, -10.0); // add a margin 
      [view scrollRectToVisible:rect]; 
     } 
    } 
    return madeFirstResponder; 
} 

솔루션 B : NSTextField 및 기타 컨트롤의 서브 클래스를 생성하고 becomeFirstResponder 우선합니다.

- (BOOL)becomeFirstResponder { 
    BOOL becameFirstResponder = [super becomeFirstResponder]; 
    if (becameFirstResponder) { 
     if ([self enclosingScrollView]) { 
      NSRect rect = [self bounds]; 
      rect = NSInsetRect(rect, -10.0, -10.0); // add a margin 
      [self scrollRectToVisible:rect]; 
     } 
    } 
    return becameFirstResponder; 
} 
+0

고맙습니다. @ 윌크. 나는 비슷한 것을 시도했지만 효과가 없었습니다. NSWindow에서 그것을하는 것은 매력처럼 작동합니다. –