Pretty much as you think -- you create prefabs for each UI screen that you need, and change the contents of that screen dynamically. For example if you need to show the building's name, you'd modify the "BuildingName" label's text value. In Windward I generally have a "row" script for each table entry -- for example, NewsTable script is attached to the same game object as UITable, and it references a prefab I created earlier with a NewsRow script on it. NewsRow references various components underneath it via public variables -- title, date, and content, for example. Then when NewsTable creates a new NewsRow prefab instance, it GetComponent<NewsRow>, and populates the values.