Hi, I found a way to get around this problem and want to share it.
In the ViewWillAppear I now create a dummy RootElement with an empty section. That ensures that the Root.TableView as well as Root.TableView.BackgroundView do exist. I then set the BackgroundView to null, and set the desired BackgroundColor. And then I create the real RootElement, ahter the UITableView settings heave been done. Far from elegant, but it works for Plain as well as Grouped UITableViewStyles. Guido. On 30 January 2013 23:24, Guido Van Hoecke <[email protected]> wrote: > Hi, > > I want to use gradient backgrounds for my tableview cells > (based upon MonoTouch.Dialog StyledStringElements), and I want to > specify the BackgroundColor of the UITableViews. > > After quite some searching and reading I came up with an approach that > builds on two distinct aspects: > > 1. Nullify the TableView.BackgroundView and set the > TableView.BackgroundColor to the desired color. This is the color that > shows in the border around Grouped tableview cells. > > 2. Set the BackgroundColor as UIColorFromPatternImage(patternImage) for > all Elements in the UITableView. > > My apps allow color selection by the user, so the pattern image is to be > created dynamically (i.e. for the initial default color and whenever the > user chooses a different color). > > 3. So here's how I create the gradient image: > > 3.1. Create a CAGradientLayer using White and the user specified color > > 3.2. Create a tiny (44x44) view, set its BackgroundColor to Clear, and > insert the above gradientLayer as layer 0 using InsertSublLayer. > > 3.3. I then render the view in the current context and retrieve it as a > UIImage file to be used by step 2 above, i.e. as patternImage. > > I created a one source demo project demonstrating these techniques. Feel > free to get it at https://gist.github.com/4677718. Create an empty > project and replace Main.cs by the Main.cs file from the gist. > It works as desired, and you can change it to use UITableViewStyle.Plain > rather than Grouped. It just works. > > So here's my problem. I use these techniques in 4 projects for all > DialogViewControllers and it works fine as long as they use > UITableViewStyle.Grouped. > > But when using UITableviewstyle.Plain the cells that are visible when > the tableview appears, do not have the GradientColor. It is as if the > BackgroundColor is Clear: they are rendered with the > TableView.BackgroundColor as BackgroundColor. > > Scrolling cells that are out of view into view shows them with the > gradient background color. Scrolling 'bad' cells out of view and back > into view shows them with gradient color. > > Clicking one of the buttons so that a next controller is shown, and > navigating back from that controller again shows all visible cells > with clear background. Scrolling cells that are out of view into view > renders them with the gradient color. > > The RootElement is (re)created in the ViewWillAppear method, so that any > changes selected at a more detailed level can be reflected in the > RootElement. And when populating it in the constructor rather than the > ViewWillAppear, the debugger shows that the Root.TableView does not > exist yet, so its BackgroundView can not be nulled, which is essential > to be able to set the UITableView.BackgroundColor. > > I created the little demo project to isolate and hopefully solve this > problem, but in that project the techniques also work with > UITableViewStyle.Plain. > > Apparently there's still an aspect that differentiates the demo project > from my apps, but to be honest, I'm out of inspiration. > > I hope that some more knowledgeable hacker can suggest something I could > try or investigate to get this solved. > > I am eager to provide any additional information that might be useful to > track this problem. > > > Guido > > -- > People respond to people who respond. > > http://vanhoecke.org ... and go2 places! _______________________________________________ MonoTouch mailing list [email protected] http://lists.ximian.com/mailman/listinfo/monotouch
