2010-01-21 37 views
0

我正在iphone上寫一個即時消息客戶端/ post ref:#IMClient01。 這裏是我對它的初步設計:IPhone即時消息客戶端設計問題

(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的對IPhone,有兩種方法可以開始交談/ chat.You可以通過點擊從聯繫人,或者如果用戶與Skype的用戶聊天有與用戶關聯的聊天記錄,您可以點擊聊天記錄中的聊天記錄。如果上面的場景映射到我的控制器類: 如果點擊ContactsController中的單元格/行,然後將ChatController推入頂部視圖。 如果在ChatsController中點擊一個單元格/行,然後將ChatController推入頂視圖。

在兩個推操作,它會是這樣的:

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

我的第一個問題是應該myChatController是一個單身類?與計算機不同的是,您可以在其中打開多個聊天窗口,並且每個窗口管理與其他人的聊天,而在iPhone中,只有一個頂部視圖/窗口,因此只能顯示一個聊天窗口?

我的第二個問題:如果ContactsController和ChatsController每個都有一個ChatController實例變量指向同一個ChatController實例,這會不會是一個好主意?所以當點擊ContactsController或ChatsController中的單元格/行時,同一個ChatController實例會被推送到頂部視圖來顯示對話?

我是否清楚地解釋我自己?如果有人能提出一些建議,我會很感激。

回答

0

爲了與您對相關問題back button goes back to a different UITableViewController from where it came from的回答保持一致,您需要完全放棄導航控制器並使用自定義代碼管理視圖切換。因此,您不必擔心使用單例(Objective-c中很難做到這一點)。您也不需要爲ContactsController和ChatsController真正瞭解ChatView,因爲它們不會正在加載並顯示它。相反,您只需在自定義控制器中的ChatView中擁有單個屬性,即可管理所有視圖的切換和製表符的切換。

所有非常ungainly和複雜,但它會工作。