ios - 在详细标题栏中,显示“Y 的图片 X”
问题描述
我在 3 个挑战中的 1 个遇到问题。
第一个挑战 使用 Interface Builder 选择表格视图单元格内的文本标签,并将其字体大小调整为更大的值——试验一下,看看什么看起来不错。(完毕)
第二个挑战在您的主表视图中,按排序顺序显示图像名称(完成)
第三个挑战是“而不是在详细标题栏中显示图像名称,而是显示“Y 的图片 X”,其中 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)
}
}
}
这是我在 detailViewController.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
文件中,InsideviewDidLoad
方法添加以下代码。
self.title = "Picture \(selectedPictureNumber!) of \(totalPictures!)"
为避免出现警告,您需要添加“!”
我希望这是您正在寻找的解决方案。
推荐阅读
- selenium-webdriver - 如何在 IE11 中找出基于客户端服务器的 Web 应用程序中元素的 xpath?
- certificate - 用于在 Java 中签署证书的智能卡类型
- javascript - 情节线后的Highcharts标记
- cpanel - 阻止 Centos 邮件服务器发送垃圾邮件并将邮件路由到托管邮件 (G-Suite)
- netsuite - 合同更新包
- java - 在没有 SNMP 代理的情况下扫描 IP
- javascript - 如何将字符串转换为对象
- ios - 指南 2.1 - 性能 - 应用程序完整性
- vue.js - 查找 Vue 路由兄弟姐妹
- visual-studio-code - 无法加载 VSCode