I am in need of a relatively simple UITabBar-based iOS application. Eventually I may want it to be Universal but for the purpose of this job, it can be iPhone only. The app basically shows the user lists of tours they can take, the stops along the tour, and an indication when each of the stops have been made.
There are three tabs in the main view: In Progress, Completed and Available. The view in each tab is essentially the same, a grouped UITableView showing data from an array of NSDictionaries. These views differ based on which specific data from the array is shown in the table cells. I have included some sample data that you can use to create the array.
The In Progress view includes only those tours which have been started by the user (@tourStarted is not = ""). Each cell in the table shows the name of the tour (@tourTitle) as its textLabel, a thumbnail image representing the tour (@tourThumbImage) as its imageView, the date the user started the tour (@tourStarted) as its detailTextLabel, a series of small icons corresponding to the number of stops on the tour (@tourLength) with a subset of them highlighted to indicate progress on the tour (@tourProgress), as well as a second image on the right side, in the accessory area, that is the same for all cells in the tab.
The Completed view includes only those tours which have been completed by the user (@tourCompleted is not = ""). Each cell in the table shows the name of the tour (@tourTitle) as its textLabel, the thumbnail image representing the tour (@tourThumbImage) as its imageView, the date the user completed the tour (@tourCompleted) as its detailTextLabel, as well as a second image on the right side, in the accessory area, that is the same for all cells in the tab.
The Available view includes all tours in the array grouped by either @tourType, @tourScope or @tourLength. Which grouping scheme to use can be selected by the user through a segemented control at the top of the screen. Each cell in the table below shows the name of the tour (@tourTitle) as its textLabel, the thumbnail image representing the tour (@tourThumbImage) as its imageView, the tour description (@tourShortDescription) as its detailTextLabel, as well as a second image on the right side, in the accessory area, that indicates whether or not the tour has been purchased (@tourPurchased).
If you feel that the included sample data could be structured differently to make the above easier to implement (eg. make the Stop1, Stop2, etc. a nested dictionary and calculate tourLength and tourProgress for it, etc.) please let me know as this is not carved in stone.
Selecting a tour from the In Progress view or Completed view will show a TourDetail view which will show the tourTitle, tourDetailImage, tourDescription and either tourStarted date or tourCompleted date at the top of the screen with a UITableView in the lower section of the screen.
The cells in the table will correspond to the stops in the tour. Each cell will display:
stopxCheckImage if stopxVisited is true, otherwise an unchecked image
Users should be able to click the unchecked image in order to check off the stop as visited which should then set stopxVisited to true for that stop.
Selecting a tour from the Available view will show a TourOptions view which will show the tourTitle, tourDetailImage, tourDescription and either a Start Tour button which will take the user to the above tour detail screen, if @tourPurchased is true, or a Buy Tour button which will initiate an in app purchase of the tour, if @tourPurchased is false. For now, you can just add a placeholder method called PurchaseTour and pass it the tourTitle.
I am trying to get this completed as soon as possible, on a rather slim budget, but I can almost guarantee a fairly steady stream of small projects over the remainder of this year and beyond if I can find the right person/team to work with on this stuff!
I would like to only enable the user's ability to click a stop in the In Progress view only when the user is within the radius stored in stopxRadius around the point defined by stopxLong and stopxlat but my budget is quite small and I can save that for some other time if it adds too much to the cost. I was thinking that without the location checking, this is extremely simple as the whole project is just displaying values from an array in a couple of slightly different tables but it really would be great if we could get the location checking in if possible. If you could add a separate price for this functionality it would be great.