2017-12-14 165 views
6

Birisi, yalnızca klavye kullanan bir kullanıcının ScrollView içindeki farklı UI Öğeleri arasında gezinmeyi denediğinde otomatik olarak nasıl kaydırma yapabilirim? 'Tab tuşu? "TAB" tuşuna bastığımda, odak scrollView'de bulunan farklı UI öğesine kaydırılır, ancak UI Öğesi Görünür İçerik Görünümünde mevcut değilse kaydırma yapmaz. Bu nasıl başarılabilir? Yardım takdir edilecektir. Teşekkürler.Erişilebilirlik: Kaydırma sırasında görünmeyen görünüme otomatik olarak kaydırmak için Kaydırma Görünümü "TAB"

+0

Kodda ilerlemek istiyor musunuz? Bir şey denedin mi? – Willeke

+0

Evet. Görünümün odakta görünmesi ve scrollView'ın görünür alanında bulunmaması durumunda kaydırma işleminin otomatik olarak gerçekleşmesini istiyorum. Ben başarısızlıkla autoscroll: 'denedim. Yapmam gereken şey hakkında hiçbir fikrim yok. Umarım benim şartım vardır. Lütfen yorum yapın. –

+0

Deneyi deneyin [view scrollRectToVisible: view.bounds] '. – Willeke

cevap

3

Çözüm A: NSWindow'un bir alt sınıfını oluşturun ve makeFirstResponder:'u geçersiz kılın. İlk cevaplayıcı değiştiğinde makeFirstResponder çağrılır.

- (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; 
} 

Çözelti B: NSTextField ve diğer kontrollerin bir alt sınıfı oluşturun ve becomeFirstResponder geçersiz kılar.

- (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

Teşekkür ederiz @Willek. Buna benzer bir şey denedim ama işe yaramadı, NSWindow'da yapmak cazibe gibi çalışıyor. –