NSOutline- és NSTableView sorkiválasztás

Egy apró érdekességbe futottam bele.

A view alapú tábla és outlineview felépítésekor a customizált sorháttér rajzoláskor szükségünk van ugye arra, hogy a cella tartalom is highlighted állapotba kerüljön. Viszont nem mindegy, hogy a sorháttér rajzoló metódusa és a cellatartalom változtatása mikor fut, mouse down vagy up állapotkor. Ha ezek nem egyszerre futnak, sorháttér down cellatartalom mouse up állapotkor, akkor lassú kattintáskor csúnya, gyors kattintáskor se túl elegáns villogást lehet észlelni. A cellatartalmak változtatására az apple egy WWDC videóban az -outlineViewDidChanged: notification-t javasolja, hogy ott állítsuk át. Ez viszont a kattintás befejezésekor fut. Ahhoz, hogy a két eseményt (közel) azonos időbe hozzuk a kétféle view datasource protokolljában implementálni kell a sárkánydobáshoz tartozó metódusokat:
-tableView:writeRowsWithIndexes:toPasteboard: illetve,
-outlineView:writeRowsWithIndexes:toPasteboard:
Ilyenkor a kattintás felengedésekor megvizsgálja, hogy indult-e droppolás és akkor állítja a cél sort kijelölt állapotba.
További optimalizáció, hogy a notification helyett szerintem a mouseUp metódusban is el lehetne végezni a cellatartalom highlighted állapotba kapcsolását, akkor még kevesebb a delay a megjelenítéskor. Viszont ez utóbbit még nem próbáltam.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.