表视图数据显示在tableview上,行选择代码为

时间:2017-12-30 15:11:06

标签: ios swift uitableview

我想这可能是我无法想象的新手错误之一。

我有一个具有表格视图的应用程序。它有文字标签和详细文字标签。

当我选择一行时,我会使用segue将我带到另一个故事板...除了模拟器上的表格视图显示外,所有这些工作正常。

详细文本标签显示在此图片中显示的模拟器上。

这是我用来检测所选单元格/行的代码。当我发表评论时,这个问题就消失了......

您在红色圆圈中看到的内容是按等级选择的,它也位于tableview的详细文本标签中。

func sectionIndexTitles(for tableView: UITableView) -> [String]? {
    let gradeselected = String(describing: sgrade)
    return [gradeselected]
}

带有问题的模拟器的屏幕截图

enter image description here

请帮助解决此问题。如果您需要更多信息,请与我们联系。

Xcode 9.1 斯威夫特4

@Caleb这是我的代码。

import UIKit

class StudentsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {


    @IBOutlet weak var cellButton: UIButton!

    @IBOutlet weak var studentDetailTable: UITableView!
    var sname:[String]?
    var sgrade:[Int]?

    var gradetext = "Grade:"
    var sstudentname = ""
    override func viewDidLoad() {
        super.viewDidLoad()
        studentDetailTable.delegate = self
        studentDetailTable.dataSource = self

        // Do any additional setup after loading the view.
    }


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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = studentDetailTable.dequeueReusableCell(withIdentifier: "cell")

        cell?.textLabel?.text = sname[indexPath.row] + gradetext + String(sgrade[indexPath.row])
        sstudentname = sname![indexPath.row]


        cell?.detailTextLabel?.text = String(sgrade![indexPath.row])
        cell?.layer.cornerRadius = (cell?.frame.height)!/2
        cell?.backgroundColor = UIColor.blue
        cell?.textLabel?.textColor = UIColor.white
        cell?.layer.borderWidth = 6.0
        cell?.layer.cornerRadius = 15
        cell?.layer.borderColor = UIColor.white.cgColor
        cell?.textLabel?.textColor = UIColor.white

        return cell!
    }



    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let selectedIndex = tableView.dataSource?.sectionIndexTitles!(for: studentDetailTable)
        let indexPath = tableView.indexPathForSelectedRow
        let currentCell = tableView.cellForRow(at: indexPath!)!
        let scell = currentCell.detailTextLabel!.text!
        sstudentname = (currentCell.textLabel?.text)!
    }


// - If I comment this section of the code issue goes away.

    func sectionIndexTitles(for tableView: UITableView) -> [String]? {
        let gradeselected = String(describing: sgrade)
        return [gradeselected]
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let myKLVC = segue.destination as! KindergartenLevelViewController
        myKLVC.klvstudentname = sstudentname

    }

2 个答案:

答案 0 :(得分:0)

红色圆圈中的文字显示[1, 2],它看起来像可能包含所有等级的数组,而不仅仅是我们在字符串gradeselected中看到的特定单元格的数组。如果代码中有这样的数组,请查找可能将其转换为字符串并绘制它的位置。也许你在代码的早期迭代中做到了这一点,以确保数组包含你想到的或什么?

Arrays并不是神秘地在屏幕上画画 - 在某个地方,有一些代码会导致这种情况发生。我们无法真正帮助您找到它,因为您还没有显示您的代码,但只知道要查找的内容可能会帮助您自己找到它。

答案 1 :(得分:-2)

您可以通过表格视图的属性indexPathForSelectedRow查询所选行。

您实施的方法与您在模拟器中看到的完全相同。

请查看文档:

属性indexPathForSelectedRow:https://developer.apple.com/documentation/uikit/uitableview/1615000-indexpathforselectedrow

func sectionIndexTitles:https://developer.apple.com/documentation/uikit/uitableviewdatasource/1614857-sectionindextitles