Swift

Swift:tableViewSelectionDidChangeの注意事項

tableViewSelectionDidChange(aNotification: NSNotification)   を使うときとの注意事項です。

selectRowやdeselectRowを実行すると、その時点でtableViewSelectionDidChangeに飛んで行ってしまいます。そのときこれを実行させたくないなら、スイッチを用意してreturnする必要があります。そうでないと、カーソルが動かされたときの処理が行われます。

たとえば、カーソルを動かす➡︎その行位置の内容を表示するように動作する、という処理があるとします。

カーソルが動かされてtableViewSelectionDidChangeから処理が始まります。しかし、カーソルを動かしたところが表示したくないフォルダであったときに、次の行を選ぶと(selectRowを実行すると)、tableViewSelectionDidChangeに再度飛んで行ってしまいます。

スイッチのクリアはtableViewSelectionDidChangeでいいと思いますが、コードが読みにくくなるので、selectRowのあとにも入れてあります。

var mqSelectedRow:Int  = 0

func tableViewSelectionDidChange(aNotification: NSNotification)   {
 if cm.mqSelectedRow < 0 { 
 cm.mqSelectedRow    = 0 
 return 
} else { }

func ExecSelectRow(row:Int) -> Int {
 if row >= 0 && row < cm.wkArray.count  {
 cm.mqSelectedRow    = -1  
 xbTVFolder?.selectRowIndexes(NSIndexSet(index: row), byExtendingSelection: false)
 cm.mqSelectedRow    = 0  
 return row         
 } else  { return -9 }  

Categories: Swift, 技術