您的問題與您的應用程序的「設計」方面密切相關。
我假設你的應用程序有一個單一的UINavigationController
,它保存了所有你的UIViewController
實例的堆棧。 此外,我假設當用戶導航離開ChatViewController
屏幕時,您正在推送新屏幕覆蓋當前ChatViewController
實例,而不是彈出ChatViewController
實例,然後推送它。
考慮到上述兩個假設,有很多方法可以完成你想要的。
快速的方法:
在ChatViewController
類聲明一個變量boolean
和isChatInProgress
分配給它的價值true
或false
,取決於聊天是否正在進行或沒有。
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if isChatInProgress {
chatTextField.becomeFirstResponder()
}
}
更好的辦法
而不是僅僅聲明boolean
變量isChatInProgress
,可以使你的代碼更面向對象和可擴展的(目標C的情況下NSObject
子類)聲明模型類ChatState
。
class ChatState {
var isChatInProgress : Bool
var chatText : String
var chatId: String
.
.
}
可以包括可能在定義你ChatState
類內部聊天屏幕的狀態有幫助的所有變量。然後,在你的類的viewDidLoad
方法只是初始化的ChatViewController
一個實例,像這樣:
override func viewDidLoad() {
super.viewDidLoad()
self.chatState = ChatState(param1, param2, ...)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if self.chatState.isChatInProgress {
chatTextField.becomeFirstResponder()
}
}
一旦你的ChatViewController
初始化實例,你可以不斷更新,這取決於事件及其參數。對於例如當用戶開始與其他用戶聊天時,可以將isChatInProgress
變量chatState
設置爲true
。
這種方法的另一個優點是,它也將有助於在您的應用程序的各種會話之間保持聊天狀態。您可以在您選擇的任何數據存儲(NSUserDefaults,CoreData,Sqlite)中歸檔ChatState
對象,並在稍後檢索它們。
令人驚歎的反應!非常感謝你:)這非常有幫助! – ryangineer