UITableView 使用 Swift 创建 iPhone 设置屏幕

UITableView creating an iPhone settings screen with Swift


我正在尝试使用单元格创建 UITableview,与 iPhone 设置屏幕截图相同。
这是我作业的一部分,所以我必须在 UITableview 中全部完成。
这就是我对我的代码所做的,但是一切都是红色的并且充满了错误。我试着按照课程中的样本来做,但看起来有点不对劲。
请帮我理解这个东西是如何工作的,有什么问题。

import UIKit
struct Lines{
    var image: [UIImage] = []
    var title: [String] = []
}

class Titles {
    

    static func titles() -> [Lines]{
        return [
            Lines(image: UIImage[ systemName: "airplane"  ,"wifi.square.fill", "bitcoinsign.circle.fill",  "iphone.homebutton.radiowaves.left.and.right", "personalhotpot" ], title: ["Авиарежим" , "Wi-fi", "Bluetooth", "Сотовая связь", "Режим модема"]),
            Lines(image: UIImage[ systemName: "bell.badge.fill"  ,"speaker.wave.3.fill", "moon.fill",  "iphone.homebutton.radiowaves.left.and.right", "clock.fill" ], title: ["Уведомления", "Звуки,тактильные сигналы", "Не беспокоить", "Экранное время"]),
            Lines(image: UIImage[ systemName: "gear"  ,"switch.2", "display" ] , title: ["Общие", " Control Centre", "Экран и яркость"])
            ]
            }
 
}

class SecondTableViewController: UITableViewController {
    var lines = Titles.titles()
   
    override func viewDidLoad() {
        super.viewDidLoad()
}
}
extension SecondTableViewController: UITableViewDataSource, UITableViewDelegate{
    func numberOfSections(in tableView: UITableView) -> Int {
        return titles.count
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return titles[section].title.count
    }
    

    
    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let cell = tableView.dequeueReusableCell(withIdentifier: "SectionCell") as! TableViewCell
        let title = titles[section]
        cell.image = Lines.image
        cell.titleLabel.text = Lines.title
        return cell
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "SecondTableViewCell") as! TableViewCell
        let name = titles[indexPath.section].title[indexPath.row]
        cell.image = Lines.image
        cell.titleLabel.text = Lines.title
        return cell
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        tableView.deselectRow(at: indexPath, animated: true)
    }
}

谢谢!

您使用了错误的 属性 名称:

func numberOfSections(in tableView: UITableView) -> Int {
    // titles is not defined 
    return titles.count
}

您必须使用:

func numberOfSections(in tableView: UITableView) -> Int {
    return lines.count
}

其他方法同理。在 cellForRow 中:

let name = titles[indexPath.section].title[indexPath.row]
Let image = titles[indexPath.section].image[indexPath.row]

应替换为:

let name = lines[indexPath.section].title[indexPath.row]

对于 viewFirHeader,您使用的单元格通常不是已完成的。每个行数组都没有标题。您可能需要重新考虑要使用什么。您组织数据的方式也可能需要重新考虑,因为您有 2 个不同的图像和标题数组。