我试图通过按钮显示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/

10-11 07:55