ved62 (ved62) wrote in ru_mac,
ved62
ved62
ru_mac

Вопрос по NSTabView

Уважаемые программисты!

Помогите, пожалуйста, разобраться с обновлением окошек label в NSTabViewItem. Есть TabView с двумя вкладками (goodTab и badTab), в которых отображаются картинки  через Image Kit, и я отображаю в окошках label  количество картинок в них в виде текста, например "Good: 133". Странность в том, что если в одной вкладке количестов объектов изменилось, например при удалении картинки во view или изменении параметров отнесения картинки к  одной или другой вкладке, и программный код соответсвенно меняет текст в label, то на экране новый текст отображается не сразу, а только после явного нажатия на вкладку или переключения между вкладками. Ниже фрагмент кода на Swift. Текст в label меняется программно для goodTab и badTab.


// two vars for key-value observing

var goodContext = 0

var badContext = 0

class TabViewController: NSViewController {

@IBOutlet weak var tabView: NSTabView!

@IBOutlet weak var goodTab: NSTabViewItem!

@IBOutlet weak var goodImageBrowserView: IKImageBrowserView!

@IBOutlet weak var badTab: NSTabViewItem!

@IBOutlet weak var badImageBrowserView: IKImageBrowserView!

let goodDataSource = ImageBrowserDataSource()

let badDataSource = ImageBrowserDataSource()


....

override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {

  switch context {

      case &goodContext:

          goodTab.label = "Good: \(goodDataSource.numberOfItemsInImageBrowser(goodImageBrowserView))"

      case &badContext:

          badTab.label = "Bad: \(badDataSource.numberOfItemsInImageBrowser(badImageBrowserView))"

      default:

          super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)

  }

  // just to display new label
        // TODO: revise!

  tabView.selectNextTabViewItem(self)

  tabView.selectPreviousTabViewItem(self)

}

....

Пока в качестве workaround использую программное преключение между вкладками туда-сюда, после комментария

// just to display new label      

но это сильно медленно при больших количествах, и я уверен, что можно заставить перерисовать поле label напрямую. Я никак не могу найти, какое именно view отвечает за label в NSTabView или в NSTabViewItem, чтобы заставить перирисовать только его. Подскажите, пожалуйста.


Tags: разработка|программирование
Subscribe
  • Post a new comment

    Error

    Comments allowed for members only

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 5 comments