IPhone即时消息客户端设计问题

时间:2010-01-21 20:41:22

标签: iphone client instant-messaging

我正在iphone上写一个IM客户端.// post ref:#IMClient01。 这是我最初的设计:

(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.

与Skype on iPhone一样,有两种方式可以开始对话/聊天。您可以通过点击用户联系人与Skype用户聊天,或者如果有与用户关联的聊天记录,您可以点按聊天中的聊天记录。如果上面的场景映射到我的控制器类: 如果在ContactsController中点击一个单元格/行,则将ChatController推送到顶视图。 如果在ChatsController中点击一个单元格/行,则将ChatController推送到顶视图。

在两次推送操作中,它会像:

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

我的第一个问题是myChatController应该是一个单例类吗?与计算机不同,您可以打开许多聊天窗口并且每个窗口管理与其他人的聊天,在iPhone中,只有一个顶视图/窗口,因此只能显示一个聊天窗口?

我的第二个问题:如果ContactsController和ChatsController都有一个指向同一个ChatController实例的ChatController实例变量,那么这是个好主意吗?因此,当点击ContactsController或ChatsController中的单元格/行时,同一个ChatController实例被推送到顶视图以显示对话?

我向自己解释清楚吗?如果有人能提出一些建议我真的很感激。

1 个答案:

答案 0 :(得分:0)

根据我对相关问题的回答back button goes back to a different UITableViewController from where it came from,您需要完全放弃导航控制器并使用自定义代码管理视图切换。

因此你不必担心使用单例(在Objective-c中很难做到这一点。)你也不需要ContactsController和ChatsController真正了解ChatView,因为它们不会加载并显示它。相反,您将在自定义控制器中拥有ChatView的单一属性,该属性管理所有视图的交换和选项卡的移位。

所有这些都非常笨拙和复杂,但它会起作用。