上一个/下一个功能,如iOS邮件应用程序?

时间:2017-01-11 18:29:34

标签: ios swift indexing uiviewcontroller

我真的很接近搞清楚这一点。因此,在iOS邮件应用程序中,当您单击两个箭头键时,它会将您带到上一个/下一个邮件。它位于右上方

Screenshot

我已设法将indexPath值传递给第二个viewcontroller并在控制台中打印。我也可以从中增加和减少。

if segue.identifier == "DetailVC" {
let detailVC = segue.destination as! DetailVC
let indexPath = self.collectionViewIBO.indexPathsForSelectedItems?.last!
detailVC.index = indexPath
}

修改 这是我从中提取数据的地方。它从我的模型中读取值。但是,我无法为其分配indexPath。我只能从之前的视图控制器

那样做
var monster: Monsters!

我尝试使用此代码实现“之前”功能。我的视图样式位于displayDataForIndexPath()函数中,函数从我的view will appear

调用
@IBAction func monsPreviousIBO(_ sender: Any) {
    self.index = IndexPath(row: self.index.row - 1, section: self.index.section)
    displayDataForIndexPath()

}

但它所做的就是减少IndexPath。由于某种原因,数据实际上并没有使用我的函数重新加载。我在这里错过了一些重要的拼图,以实现相同的功能。

编辑我的displayDataForIndex中的代码如下

func displayDataForIndexPath() {

    if index.row == 0 {
        self.monsPreviousIBO.removeFromSuperview()
    }

    var monsterName = (String(format: "%03d", monster.speciesId!))
    self.navigationItem.title = monster.name!


    let gif = UIImage(gifName: monsterName)
    self.gifIBO.setGifImage(gif, manager: gifManager)
    gifIBO.contentMode = .center
    guard monster.legendary! != true else {
        // Value requirements not met, do something
        monsterStatusLegend()
        return
    }
    guard monster.subLegend! != true else {
        // Value requirements not met, do something
        monsterStatusSub()
        return
    }
    guard monster.isMega! != true else {
        // Value requirements not met, do something
        monsterStatusMega()
        return
    }
}

1 个答案:

答案 0 :(得分:0)

根据monster显示所有数据,但您永远不会根据您使用的索引路径更改monster

添加一些代码以填充monster

中的indexPath
monster = getMonster(index.row)

或在你的情况下

@IBAction func monsPreviousIBO(_ sender: Any) {
    self.index = IndexPath(row: self.index.row - 1, section: self.index.section)
    monster = mons[self.index.row]
    displayDataForIndexPath()
}

或更好的displayDataForIndexPath()添加此行:

func displayDataForIndexPath() {

    if index.row == 0 {
        self.monsPreviousIBO.removeFromSuperview()
    }

    monster = mons[self.index.row]

    //....

注意一些建议:

  • 我会更改按钮的行,然后在indexpath获得> 0时启用它:

    self.monsPreviousIBO.isEnabled = (index.row != 0)
    
  • 只需将行保存为monsterIndex = indexPath.row,然后只处理索引而不处理indexPath。

  • 如果你只在displayDataForIndexPath中使用怪物,你不需要将当前怪物保存为怪物 - 那么你可以在那里得到当前的怪物并在这个函数中有一个局部变量:

    var monster = mons[self.index.row]