Support => NGUI 3 Support => Topic started by: DirtyHippy on January 24, 2014, 12:20:56 PM
Title: UITable / UIPanel Requests
Post by: DirtyHippy on January 24, 2014, 12:20:56 PM
Three questions (added another):
1) For UITable, it doesn't reposition right away on the first update until it grabs a reference to the panel. If you don't use keep within panel there doesn't appear to be a reason to wait until the update. Can you allow Reposition () to fire immediately when KeepWithinPanel is false and initdone is false?
When I put this in, it resolves a lot of problems that require me to wait a frame. You could also put in a little optimization to not bother grabbing the panel if KeepWithinPanel is false. I know I could subscribe to the OnReposition event, but this works better IMHO.
2) Can we get an event for panel dimensions changing? I dynamically change clipping areas of panels in scroll views and I need to propagate those changes to subscribers so they can adjust their dimensions in some cases. There is a panel OnChange, but it handles a different use case than UIWidget OnChange (which handles dimensions). Why not add a OnDimensionChanged event to the UIRect that both UIWidget and UIPanel inherit?
3) Any way you could make the isEnabled in UIButton virtual? I inherit from this class and override this behavior since UIButton expects a collider and disables itself without one. Instead, I am using it without a collider and pushing events to it manually from underlying colliders (I use this for RowHover highlights on my multi-column list control). This one is debatable, but I don't see any harm in it. 3.09 f4
Title: Re: UITable / UIPanel Requests
Post by: ArenMook on January 25, 2014, 02:24:07 AM
1. UITable doesn't delay anything until the next update. It performs its logic in Start(). It will do it in Update() as well if you re-enable it later. If you re-enable it yourself and want it to execute immediately, don't re-enable it -- call Reposition() instead.
2. Since you are the one who changes the rect of the panel, why not just call the functions yourself? gameObject.BroadcastMessage("MarkAsChanged", SendMessageOptions.DontRequireReceiver); would do the trick, without even having to GetComponents.