在详细信息标题栏中,显示"Picture X of Y"



我在 1 个挑战中有 3 个遇到了问题。

第一个挑战 使用界面生成器选择表格视图单元格内的文本标签,并将其字体大小调整为更大的字体大小 - 尝试一下,看看什么看起来不错。(完成)

第二个挑战 在主表视图中,按排序顺序显示映像名称(完成)

第三个挑战是 "不要在详细标题栏中显示图像名称,而是显示"Picture X of Y",其中 Y 是图像总数,X 是所选图片在数组中的位置。确保从 1 而不是 0 开始计数。

我正在创建一个带有单元格和图像的简单表格视图行,当您单击它时,它将显示图片。

我有一个想法,但我正在挣扎。所以我知道标题将使用字符串插值,我已经创建了

var selectedPictureNumber = 0
var totalPictures = 0

现在我尝试创建

var selectedPictureNumber =  pictures[indexPath.row]
or
var selectedPictureNumber = indexPath.row

但是我收到错误消息

这是我在mainViewController上得到的.swift

class ViewController: UITableViewController {
var pictures = [String]()
override func viewDidLoad() {
super.viewDidLoad()

// Adds a title to the navegation bar.
title = "Storm Viewer"

//This makes the title larger as well.
navigationController?.navigationBar.prefersLargeTitles = true
// THis code manages the images from the files saved locally to xcode
let fm = FileManager.default
let path = Bundle.main.resourcePath!
let items = try! fm.contentsOfDirectory(atPath: path)

for item in items {
if item.hasPrefix("nssl"){
pictures.append(item)
}
}
// This pictures.sort makes the arrays sort in order.
pictures.sort()
print(pictures)
}
// This code creates  the table view rows , adds the table cells and adds the pictures to each table view cell.

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return pictures.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "picture", for: indexPath)
cell.textLabel?.text = pictures[indexPath.row]
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let vc = storyboard?.instantiateViewController(withIdentifier: "Detail") as? DetailViewController{
vc.selectedImage = pictures[indexPath.row]
navigationController?.pushViewController(vc, animated: true)
}
}
}

这是我在我的详细视图控制器上的内容.swift

class DetailViewController: UIViewController {
// Outlets
@IBOutlet var imageView: UIImageView!
// Vars
var selectedImage : String?
var selectedPictureNumber = 0
var totalPictures = 0
override func viewDidLoad(){
title = selectedImage
super.viewDidLoad()
// THis code makes the title of the navegation bar on the detailViewcontroller the name of the img.
title = selectedImage

// This line will make it so that the title on the navegation bar will not be large.
navigationItem.largeTitleDisplayMode = .never
//This code lets the images that are on the detailViewController
if let imageToLoad = selectedImage{
imageView.image = UIImage(named: imageToLoad)
}
}

// This code will make the Navigation bar appear & Dissapear with a touch on the screen.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.hidesBarsOnTap = true
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.hidesBarsOnTap = false
}
}

我有你的问题,只需更新mainViewController.swift的代码,如下所示:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let vc = storyboard?.instantiateViewController(withIdentifier: "Detail") as? DetailViewController{
vc.selectedImage = pictures[indexPath.row]
vc.selectedPictureNumber = indexPath.row + 1
vc.totalPictures = pictures.count
navigationController?.pushViewController(vc, animated: true)
}
}

您必须将 selectedPictureNumber 和 totalPictures 的属性添加到 DetailViewController

var selectedPictureNumber : Int?
var totalPictures : Int?

然后在detailViewController.swift文件中,viewDidLoad方法内部添加以下代码。

self.title = "Picture (selectedPictureNumber!) of (totalPictures!)"

为避免出现警告,您需要添加"!">

我希望这是您正在寻找的解决方案。

最新更新