LoginSignup
0
0

More than 5 years have passed since last update.

UITableのソート条件を自分で決める

Last updated at Posted at 2015-12-23

UITable

このコンポーネントがアタッチされたオブジェクトの下にあるUIWidget群をうまいこと被らないように並び替えてくれるいいヤツです。

UITable自体に色々設定がありますが、今回はそれらの説明は省略します。

並び替え

今回の本題はこっち。
Sortingの設定を変更することで並び方を変えることができます。
…が、

  • 文章
  • 画像
  • 文章

みたいな並びにしようとHierarchy上にそうやってUIWidgetを並べても、以下のソート条件の都合で順序が意図通りにならなかったりします。

設定 ソート条件
Alphabetic 名前順( string.Compare( a.name, b.name ) )
Horizontal x座標順( a.localPosition.x.CompareTo(b.localPosition.x ) )
Vertical y座標順 ( b.localPosition.y.CompareTo(a.localPosition.y ) )
Custom 自分で定義する

Verticalにした上で最初から適当に座標ずらせばいいでしょと思われるかもしれませんが、
今回はそれすらめんどくさがって「なんとか動的にオブジェクト追加した順の並び(Hierarchy上の並び)と同じにしたい」と思って調べた内容をお送りします。

※追記(2016/01/19)
以下の内容ですが、Sorting設定をNoneにすることで同じことが実現できそうです…;

自分でソート条件を定義する

設定がCustomになっている状態の時、スクリプト側からソート条件を指定出来ます。
やり方ですが、UITableonCustomSortにメソッドを渡します。

「Hierarchy上の並びと同じにしたい」場合は以下のように書くと実現できます。

        private void Start() {
            _table.onCustomSort = ( a, b ) => {
                return a.GetSiblingIndex().CompareTo( b.GetSiblingIndex() );
            };
        }

        [SerializeField]
        private UITable _table;

大事なのは

a.GetSiblingIndex().CompareTo( b.GetSiblingIndex() );

コレ。
transform.GetSiblingIndex()で自身の階層内の順番を取得できるのでそれを使って判定することでHierarchy上の並びと同様の形に出来ます。

やってみると案外楽でした。
onCustom~みたいなやつはNGUI内には結構あるので調べてみると色々捗るかも。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0