我试图通过按钮显示UITableView,我尝试了两种不同的方式:
从一开始就隐藏着一个UIStackView
来显示,而只是以“ isHidden”来显示,另一种以另一个UIViewController
的视图来显示,这被称为“ didMove(toParentViewController:self)”
通过这两种方式,tableview会立即显示,但要再次隐藏它,这将永远花费。
我尝试将“ isHidden = true”放入“ DispatchQueue.main.sync”中以使用主线程,但仍无法按我希望的方式工作...
有什么建议吗?
这是我的应用程序的一些代码:
@IBAction func ProfilPicture1Pressed(_ sender: UIButton) {
let popUpTeamDog = storyboard?.instantiateViewController(withIdentifier: "selectTeamDogPopUp") as! SelectTeamDogPopUp
DispatchQueue.global().async(execute: {
DispatchQueue.main.sync{
self.addChildViewController(popUpTeamDog)
popUpTeamDog.view.frame = self.view.frame
self.view.addSubview(popUpTeamDog.view)
popUpTeamDog.didMove(toParentViewController: self)
}
})
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let dog: Dog
if(searching){
dog = searchArray[indexPath.row]
} else {
dog = dogs[indexPath.row]
}
let nameDog = dog.name
//let imgDog = UIImage(named: dog.image)
print(nameDog)
DispatchQueue.global().async(execute: {
DispatchQueue.main.sync{
self.view.removeFromSuperview()
}
})
因此,我可以添加一点,当我单击searchBar,然后选择一条狗时,tableView / View会立即消失,因此,当键盘被激活时,效果很好...奇怪的事情。...
答案 0 :(得分:2)
默认情况下,您的代码使用主线程。因此,您不必使用此DispatchQueue.global()
和DispatchQueue.main
。太慢了。
所以替换掉这个
DispatchQueue.global().async(execute: {
DispatchQueue.main.sync{
self.addChildViewController(popUpTeamDog)
popUpTeamDog.view.frame = self.view.frame
self.view.addSubview(popUpTeamDog.view)
popUpTeamDog.didMove(toParentViewController: self)
}
})
使用
self.addChildViewController(popUpTeamDog)
popUpTeamDog.view.frame = self.view.frame
self.view.addSubview(popUpTeamDog.view)
popUpTeamDog.didMove(toParentViewController: self)
,然后对self.view.removeFromSuperview()
执行相同的操作。取代这个
DispatchQueue.global().async(execute: {
DispatchQueue.main.sync{
self.view.removeFromSuperview()
}
})
与
self.view.removeFromSuperview()