UITableViewController didSelectRowAt 没有正确关闭
UITableViewController didSelectRowAt not properly dismissing
正如您在下面的代码中看到的那样,我已经尝试了一些方法来将 UIViewTableController 关闭到我的 parent ViewController 中,一旦选择了一行但运气不佳
我的 UITable 中的 didselectRowAt 代码ViewController:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//self.storyboard?.instantiateInitialViewController()
//self.navigationController?.popViewController(animated: true)
print("before dismissing")
self.dismiss(animated: true, completion: {
print("dismissing")
self.delegate?.showWeatherInfo()
})
print("after dismissing")
let geoCoder = CLGeocoder()
geoCoder.geocodeAddressString(self.searchResults[indexPath.row], completionHandler: {(placemarks: [CLPlacemark]?, error: Error?) -> Void in
if let placemark = placemarks?[0] {
print(placemark)
}
})
/*
self.dismiss(animated: true, completion: {
self.delegate?.showWeatherInfo()
})
*/
}
相同的协议 class:
protocol ShowWeather{
func showWeatherInfo()
}
我在 ViewController 中调用它的地方:
@IBAction func searchButton(_ sender: UIButton) {
searchButtonUIChanges()
textFieldBg_view.backgroundColor = UIColor.clear
//create searchresult object and add it as a subview
searchResultController = SearchResultsController()
searchResultController.delegate = self
addChild(searchResultController)
searchResultController.view.backgroundColor = UIColor.clear
searchResultController.view.frame = CGRect(x: 0, y: 64+textFieldBg_view.frame.size.height - 25, width: self.view.frame.size.width, height: self.view.frame.size.height - 50)
view.addSubview(searchResultController.view)
searchResultController.didMove(toParent: self)
let screenHeight = -(UIScreen.main.bounds.height/2 + textFieldBg_view.frame.height/2)
textFieldBg_view.transform = CGAffineTransform(translationX: 0, y: screenHeight)
UIView.animate(withDuration: animateDuration, delay: delay, usingSpringWithDamping: springWithDamping, initialSpringVelocity: 0, options: .allowUserInteraction, animations: {
self.textFieldBg_view.transform = .identity
}, completion: nil)
searchTextField.becomeFirstResponder()
}
显然在关闭打印之前和之后有效,但完成内部的关闭打印不起作用。我目前还没有任何信息被传回 UIViewController 的原因是,好吧,我什至还没有到达那里。
是的,在我的 ViewController class header 中,我有 TableViewController class 协议,但这无关紧要,因为 UITableViewController 甚至还没有正确解雇。
当您关闭 vc 时,它已被取消,因此您需要在关闭前传递数据
print("before dismissing \(delegate)") // print delegate to see if nil
self.delegate?.showWeatherInfo()
self.dismiss(animated: true, completion: {
print("dismissing")
})
此外,如果 vc 被推入导航 dismiss
将不起作用,您需要使用
self.navigationController?.popViewController(animated: true)
正如您在下面的代码中看到的那样,我已经尝试了一些方法来将 UIViewTableController 关闭到我的 parent ViewController 中,一旦选择了一行但运气不佳
我的 UITable 中的 didselectRowAt 代码ViewController:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//self.storyboard?.instantiateInitialViewController()
//self.navigationController?.popViewController(animated: true)
print("before dismissing")
self.dismiss(animated: true, completion: {
print("dismissing")
self.delegate?.showWeatherInfo()
})
print("after dismissing")
let geoCoder = CLGeocoder()
geoCoder.geocodeAddressString(self.searchResults[indexPath.row], completionHandler: {(placemarks: [CLPlacemark]?, error: Error?) -> Void in
if let placemark = placemarks?[0] {
print(placemark)
}
})
/*
self.dismiss(animated: true, completion: {
self.delegate?.showWeatherInfo()
})
*/
}
相同的协议 class:
protocol ShowWeather{
func showWeatherInfo()
}
我在 ViewController 中调用它的地方:
@IBAction func searchButton(_ sender: UIButton) {
searchButtonUIChanges()
textFieldBg_view.backgroundColor = UIColor.clear
//create searchresult object and add it as a subview
searchResultController = SearchResultsController()
searchResultController.delegate = self
addChild(searchResultController)
searchResultController.view.backgroundColor = UIColor.clear
searchResultController.view.frame = CGRect(x: 0, y: 64+textFieldBg_view.frame.size.height - 25, width: self.view.frame.size.width, height: self.view.frame.size.height - 50)
view.addSubview(searchResultController.view)
searchResultController.didMove(toParent: self)
let screenHeight = -(UIScreen.main.bounds.height/2 + textFieldBg_view.frame.height/2)
textFieldBg_view.transform = CGAffineTransform(translationX: 0, y: screenHeight)
UIView.animate(withDuration: animateDuration, delay: delay, usingSpringWithDamping: springWithDamping, initialSpringVelocity: 0, options: .allowUserInteraction, animations: {
self.textFieldBg_view.transform = .identity
}, completion: nil)
searchTextField.becomeFirstResponder()
}
显然在关闭打印之前和之后有效,但完成内部的关闭打印不起作用。我目前还没有任何信息被传回 UIViewController 的原因是,好吧,我什至还没有到达那里。
是的,在我的 ViewController class header 中,我有 TableViewController class 协议,但这无关紧要,因为 UITableViewController 甚至还没有正确解雇。
当您关闭 vc 时,它已被取消,因此您需要在关闭前传递数据
print("before dismissing \(delegate)") // print delegate to see if nil
self.delegate?.showWeatherInfo()
self.dismiss(animated: true, completion: {
print("dismissing")
})
此外,如果 vc 被推入导航 dismiss
将不起作用,您需要使用
self.navigationController?.popViewController(animated: true)