我试图通过按钮显示UITableView,我尝试了2种不同的方式:
一开始是用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会立即消失,因此,当键盘被激活时,效果很好...。
最佳答案
默认情况下,您的代码使用主线程。因此,您不必使用此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()
关于ios - isHidden或view.removeFromSuperView花费很长时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53457672/