我正在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实例被推送到顶视图以显示对话?
我向自己解释清楚吗?如果有人能提出一些建议我真的很感激。
答案 0 :(得分:0)
根据我对相关问题的回答back button goes back to a different UITableViewController from where it came from,您需要完全放弃导航控制器并使用自定义代码管理视图切换。
因此你不必担心使用单例(在Objective-c中很难做到这一点。)你也不需要ContactsController和ChatsController真正了解ChatView,因为它们不会加载并显示它。相反,您将在自定义控制器中拥有ChatView的单一属性,该属性管理所有视图的交换和选项卡的移位。
所有这些都非常笨拙和复杂,但它会起作用。