BT

MonoTouch.Dialog Makes Creating Simple iPhone Dialogs Easier and Faster

by Jonathan Allen on Feb 24, 2010 |

In order to simplify iPhone development using MonoTouch, Miguel de Icaza has developed two new abstraction layers over UITableView. These abstraction layers give developers the option to use a declarative syntax based on attributes or an imperative model based on nested controls.

UITableView or “table view” is the workhorse for iPhone development. While quite powerful, it can also be tedious to use. One cannot simply add new sections and rows. First, one has to override the numberOfSections function to return the correct count. Then the numberOfRowsInSection function must be adjusted to return the correct value for each function. Finally the widget itself can be loaded via the cellForRowAtIndexPath function. If these three functions are not kept in sync, the UI could look as if it were randomized.

The first of Miguel’s abstraction layers uses a series of nested “elements”. Each element represents a type of widget that will be placed into a cell at runtime. Here is an example from Miguel’s blog.

  var root = new RootElement ("Settings") { 
          new Section (){ 
              new BooleanElement ("Airplane Mode", false), 
              new RootElement ("Notifications", 0, 0) { Notifications } 
          }, 
          new Section (){ 
              new RootElement ("Sound"), { Sound }, 
              new RootElement ("Brightness"){ Brightness }, 
              new RootElement ("Wallpaper"){ Wallpaper } 
          }, 
          new Section () { 
              new EntryElement ("Login", "Your login name", "miguel"), 
              new EntryElement ("Password", "Your password", "password", true), 
              new DateElement ("Select Date", DateTime.Now), 
              new TimeElement ("Select Time", DateTime.Now)
          } 
  } 

Miguel writes,

Although the UITableView is built on the powerful Model/View/Controller setup that would allow it to scale efficiently to large data sets, most configuration pages and data entry pages do not require this complexity.

Another feature is that it takes care of all the bookkeeping required to do text entry without any work from the programmer: accepting keyboard input, automatically switching to the next entry line on return, aligning all entry lines in a section, dismissing the keyboard with the last input is reached.

Miguel is also offering a reflection based design for quick and dirty configuration screens. This technique relies on the compiler compiling the member variables in the same order as they are found in source code, so be wary of code formatting utilities that automatically sort your code.

  class AccountInfo { 

  [Section] 
  public bool AirplaneMode; 

  [Section ("Data Entry", "Your credentials")] 

  [Entry ("Enter your login name")] 
  public string Login; 

  [Caption ("Password"), Password ("Enter your password")] 
  public string passwd; 

  [Section ("Travel options")] 
  public SeatPreference preference; 
  }

MonoTouch.Dialog is being offered under the MIT X11 license. MonoTouch itself is a commercial product from Novell that allows .NET based applications to run on Apple’s iPhone and iPad devices.

Hello stranger!

You need to Register an InfoQ account or to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread
Community comments

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Discuss

Educational Content

General Feedback
Bugs
Advertising
Editorial
InfoQ.com and all content copyright © 2006-2013 C4Media Inc. InfoQ.com hosted at Contegix, the best ISP we've ever worked with.
Privacy policy
BT