2017-12-14 13 views
6

キーボード専用のユーザーがScrollView内の別のUI要素間を移動しようとすると、自動的にscrollViewをスクロールする方法を教えてもらえますか? 'Tab'キー? 「TAB」キーを押すと、フォーカスはスクロールビューに表示されている別のUI要素に移動しますが、UI要素が表示コンテンツビューにない場合はスクロールしません。どのようにこれを達成することができます。ヘルプをいただければ幸いです。ありがとう。アクセシビリティ:ScrollViewをタップしても表示されないビューに自動スクロールする

+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でやって、魅力的に動作します。 –

関連する問題