首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Segue在Swift 3中不工作的TableView重新加载

Segue在Swift 3中不工作的TableView重新加载
EN

Stack Overflow用户
提问于 2016-10-01 07:31:49
回答 2查看 704关注 0票数 1

在Swift v3中,我的TableView不会在segue上重新加载。我很确定这段代码在2.0中是有效的。

代码语言:javascript
运行
复制
@IBAction func unwindToLevelListView(_ segue: UIStoryboardSegue)
{
    print("RELOADING VIEW")
    TableView.reloadData()
}

重新加载视图打印,但TableView不重新加载。我也尝试过将这段代码放入ViewDidLoad和ViewDidAppear中,但这两种代码都不起作用。

请注意,行也不会在显示时重新加载(即向下滚动,然后再向上滚动)。

我们非常感谢提供援助。

守则如下:

代码语言:javascript
运行
复制
override func viewDidAppear(_ animated: Bool)
{
    TableView.reloadData()
}

// Create Table
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCell(withIdentifier: "LevelSelected", for: indexPath) as! LevelListCell

    // Set labels
    cell.levelNameLabel.text = "LEVEL " + String(puzzleLevels[(indexPath as NSIndexPath).row])
    let unlocked: Bool = puzzleUnlocked[(indexPath as NSIndexPath).row]

    if(challengeSelected == 1 && (indexPath as NSIndexPath).row == 0 && puzzleUnlocked[1] == false)
    {
        cell.levelStatusLabel.text = "Not Solved"
    }
    else if(unlocked == true)
    {
        cell.levelStatusLabel.text = "Solved"
    }
    else
    {
        cell.levelStatusLabel.text = "Not Solved"
    }

    // Set color
    cell.levelNameLabel.textColor = UIColor.white
    cell.levelStatusLabel.textColor = UIColor.white

    if unlocked == false
    {
        cell.backgroundColor = UIColor.lightGray
        // Uncomment to disable interaction
        // cell.userInteractionEnabled = false // Comment Out to Remove Lock
    }
    else if unlocked == true
    {
        cell.backgroundColor = UIColor(red: 0, green: 64, blue: 128, alpha: 0.0)
        cell.isUserInteractionEnabled = true
    }

    return cell
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    return puzzleLevels.count
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
    levelSelected = (indexPath as NSIndexPath).row

    self.performSegue(withIdentifier: "LevelSelected", sender: levelSelected);
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
    if (segue.identifier == "LevelSelected")
    {
        if let nextViewController = (segue.destination as? GameViewController)
        {
            nextViewController.selectedLevel = levelSelected
            nextViewController.selectedChallenge = challengeSelected
        }
        print("List View Level Selected:\(levelSelected)")
    }
}

@IBAction func unwindToLevelListView(_ segue: UIStoryboardSegue)
{
    print("RELOADING VIEW")
    TableView.reloadData()
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-05 05:28:05

谢谢你的回复。我能弄清楚到底是怎么回事。最重要的事情,当做的时候,是确保值是重新建立。

代码语言:javascript
运行
复制
@IBAction func unwindToLevelListView(_ segue: UIStoryboardSegue)
{
    print("RELOADING VIEW")
    let getLevels = Level(challengeNumber: challengeSelected, gameSelected: gameSelected)
    puzzleLevels = getLevels.puzzleLevels
    puzzleUnlocked = getLevels.unlocked
    tableView.reloadData()
}
票数 0
EN

Stack Overflow用户

发布于 2016-10-03 15:35:55

代码语言:javascript
运行
复制
NotificationCenter.default.addObserver(self, selector:"reloadData", name:
NSNotification.Name(rawValue: "reloadTableView"), object: nil)

func reloadData(){
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
            print("Work SO !!")
            self.tableView.reloadData()
        }
}

NotificationCenter.default.post(name: NSNotification.Name(rawValue: "reloadTableView"), object: nil)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39804112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档