I have one view controller with table view. I want know, how it possible to make, that when user tap on one of the row it will show another view controller for 5 seconds. Here is my code. I've created a objc func:
@objc func moveHome() {
store.dispatch(NavigationAction(destination: .home, direction: .forward))
}
And in the method didSelectRowAt:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let st = UIStoryboard(name: "SchoolsMain", bundle: nil)
let vc = st.instantiateViewController(withIdentifier: "SchoolsPreHomeViewController") as? SchoolsPreHomeViewController
UserDefaults.standard.set(testData[indexPath.row].name, forKey: "orgNameForSplash")
self.timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(self.moveHome), userInfo: nil, repeats: false)
}
It's works, but not like I want. Now when we select each of the row, we waiting for 5 seconds and then another view controller shows. But I want that we tap and it will show at the moment for 5 seconds.
CodePudding user response:
Set the timer of 5 seconds in the ViewController (SchoolsPreHomeViewController) that you need to show and on the completion of those 5 seconds call the method in which you will need to write the code to dismiss/pull it (SchoolsPreHomeViewController).
Feel free to ask if any doubt.
CodePudding user response:
you can do it like this.
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let st = UIStoryboard(name: "SchoolsMain", bundle: nil)
gaurd let vc = st.instantiateViewController(withIdentifier: "SchoolsPreHomeViewController") as? SchoolsPreHomeViewController else {
return
}
present(vc, animated: true, completion: nil)
// or you can push it to the navigation controller
DispatchQueue.main.asyncAfter(deadline: .now() 5.0) {
vc.dismiss(animated: true, completion: nil)
// if you have pushed the vc on navigation stack then pop it here
}
}
CodePudding user response:
Agree with A. Basit above. Just want to add that that will only work if you want a modal segue (which you probably do). If you want a slide segue you should replace that with unwind or pop to root nav controller