views:

72

answers:

1

I am writing an IM Client on iphone.// post ref: #IMClient01. Here is my initial design of it:

(UIView*)LogInWindow; // to log in
(UITabBarController*) MainTabBarController;//have three tabs, namely:Contacts, Chats, My Profile 
(UITableViewController*)ContactsController; //manages a list of contact/user
(UITableViewController*)ChatsController;    //manages a list of chat history, each row is a chat with a different person
(UIViewController *)ChatController; //manages a chat/conversation with a single user.

As in Skype on IPhone, there are two ways to start a conversation/chat.You can either chat with a Skype user by tapping on the User from Contact or if there is a Chat History associated with the user, you can tap the Chat History in Chats. if the above scenario mapped to my controller classes: If Tapping a cell/row in ContactsController then push ChatController to top view. If Tapping a cell/row in ChatsController then push ChatController to top view.

In the two push operations, it would something like:

[self.navigationController pushViewController:myChatController animated:YES];

My first question is should myChatController be a singleton class? Unlike on computers,where you can have many chat windows open and each window manages a chat with a different person, in IPhone, there is only one top view/window, so only one chat window can be displayed?

My second question: Would this be a good idea if ContactsController and ChatsController each has a ChatController instance variable that points to the same ChatController instance? So when a cell/row in ContactsController or ChatsController is tapped, the same ChatController instance is pushed to the top view to display the conversation?

Am I explaining myself clear enough? I would really appreciate if someone can give some suggestions.

A: 

In keeping with my answer to your related question, http://stackoverflow.com/questions/2113387/back-button-goes-back-to-a-different-uitableviewcontroller-from-where-it-came-fro/2114154#2114154, you need to abandon the navigation controller entirely and manage the switching of views with custom code.

As such you don't need to worry about using a singleton (which is hard to do in Objective-c anyway.) Nor to you need for the ContactsController and ChatsController to really know about the ChatView because they won't be loading and displaying it. Instead you will just have single attribute for the ChatView in the custom controller that manages the swapping out of all the views and the shifting of tabs.

All very ungainly and complicated but it will work.

TechZen