0

我正在 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.

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

在两个推送操作中,它类似于:

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

我的第一个问题是 myChatController 应该是一个单例类吗?不像在电脑上可以打开多个聊天窗口,每个窗口管理与不同人的聊天,在 iPhone 中,只有一个顶视图/窗口,所以只能显示一个聊天窗口?

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

我是否足够清楚地解释自己?如果有人可以提出一些建议,我将不胜感激。

4

1 回答 1

0

根据我对您的相关问题的回答,后退按钮会从它的来源返回到不同的 UITableViewController,您需要完全放弃导航控制器并使用自定义代码管理视图的切换。

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

一切都非常笨拙和复杂,但它会起作用。

于 2010-01-22T14:12:47.600 回答