【问题标题】:how to access uitableview cell element outside of "cell for row at indexpath"如何访问“索引路径行的单元格”之外的uitableview单元格元素
【发布时间】:2016-02-25 09:57:27
【问题描述】:

我正在使用具有动态行数的 uitableview。 (最多 4 个)。我正在手动进行本地化。因此,当有一个单元格定位时,效果非常好。但是当有多个单元格时,我的应用程序就会崩溃。 这是我的代码

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell : customerCell = tableView.dequeueReusableCellWithIdentifier("customerCell") as! customerCell
    func localcell()
    {
        cell.lblpassegernumber.text = Localization("Passanger1")
        cell.lblSeatNo.text = Localization("SeatNo")
        cell.lblTCnumberL.text = Localization("TcNumber")
        cell.lbltelephonenoL.text = Localization("MobileNumer")
        cell.lblnameL.text = Localization("NameSurname")
        cell.lblemailL.text = Localization("EMailAddress")
    }

    if (indexPath.row == 1)
    {
        localcell()
        email1      = txtemailaddress.text
        telephone1  = txtnameSurname.text
        tcnumber1   = txtTCnumber.text
        name1       = txtnameSurname.text
    }
    if (indexPath.row == 2)
    {
        localcell()
        email2 = txtemailaddress.text!
        telephone2  = txtnameSurname.text
        tcnumber2   = txtTCnumber.text
        name2       = txtnameSurname.text
    }
    if (indexPath.row == 3)
    {
        localcell()
        email3 = txtemailaddress.text!
        telephone3  = txtnameSurname.text
        tcnumber3   = txtTCnumber.text
        name3       = txtnameSurname.text
    }
    if (indexPath.row == 4)
    {
        localcell()
        email4 = txtemailaddress.text!
        telephone4  = txtnameSurname.text
        tcnumber4   = txtTCnumber.text
        name4       = txtnameSurname.text
    }
    return cell
}

我哪里错了。如果有任何其他选项可以将 uitableviewcell 元素添加到 indexpath 处的行的侧单元格之外,请建议我

【问题讨论】:

  • 该错误可能会有所帮助,但是txtemailaddress.text! 中的! 可能是问题所在。 localcell() 也可以调用一次。
  • 您最多有 4 行,因此您的 indexPath.row 索引只能从 0 到 3

标签: ios swift uitableview swift2 ios9


【解决方案1】:

您可以在故事板中创建 1 个原型单元格。在您的表格视图控制器中这样做

 func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return dynamicnum.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

   let cell : customerCell = tableView.dequeueReusableCellWithIdentifier("customerCell") as! customerCell

    cell.lblpassegernumber.text = Localization("Passanger1")
    cell.lblSeatNo.text = Localization("SeatNo")
    cell.lblTCnumberL.text = Localization("TcNumber")
    cell.lbltelephonenoL.text = Localization("MobileNumer")
    cell.lblnameL.text = Localization("NameSurname")
    cell.lblemailL.text = Localization("EMailAddress")

    return cell

}

【讨论】:

  • 我的问题是本地化在第一行运行良好,但到了第二行却崩溃了。
【解决方案2】:

第一行的indexPath.row0,而不是1。所以用这个:

switch indexPath.row {
case 0:
    // handle first row
case 1:
    // handle second row
case 2:
    // handle third row
case 3:
    // handle fourth row
default:
    break
}

【讨论】:

  • 我的问题是本地化在第一行运行良好,但到了第二行却崩溃了。
【解决方案3】:

我认为你在代码中犯了一些错误,我也没有得到究竟在做什么

{
localcell()

    email1      = txtemailaddress.text
    telephone1  = txtnameSurname.text
    tcnumber1   = txtTCnumber.text
    name1       = txtnameSurname.text
}

我能为你做的是,我可以编辑你的代码如下。

func tableView(tableView: UITableView, cellForRowAtIndexPath   indexPath: NSIndexPath) -> UITableViewCell {

let cell : customerCell =     tableView.dequeueReusableCellWithIdentifier("customerCell") as!     customerCell

    //This is common for all cells so no need to create and call func for this
    cell.lblpassegernumber.text = Localization("Passanger1")
    cell.lblSeatNo.text = Localization("SeatNo")
    cell.lblTCnumberL.text = Localization("TcNumber")
    cell.lbltelephonenoL.text = Localization("MobileNumer")
    cell.lblnameL.text = Localization("NameSurname")
    cell.lblemailL.text = Localization("EMailAddress")

//You were missing indexPath 0 here (not getting what you are doing by this, you could create an array and save dictionary of these values.)
if (indexPath.row == 0) {
    email1      = txtemailaddress.text
    telephone1  = txtnameSurname.text
    tcnumber1   = txtTCnumber.text
    name1       = txtnameSurname.text
} else if (indexPath.row == 1) {
    email2 = txtemailaddress.text!
    telephone2  = txtnameSurname.text
    tcnumber2   = txtTCnumber.text
    name2       = txtnameSurname.text
} else if (indexPath.row == 2) {
    email3 = txtemailaddress.text!
    telephone3  = txtnameSurname.text
    tcnumber3   = txtTCnumber.text
    name3       = txtnameSurname.text
} else if (indexPath.row == 3) {
    email4 = txtemailaddress.text!
    telephone4  = txtnameSurname.text
    tcnumber4   = txtTCnumber.text
    name4       = txtnameSurname.text
}

    return cell
}

如果你想在外面访问单元格元素,你可以这样做

  1. 如果您需要访问单元格按钮操作内的单元格元素

    @IBAction func buttonClicked(sender: UIButton) {

    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:tableViewOutlet];
    

    NSIndexPath *indexPath = [tableViewOutlet indexPathForRowAtPoint:buttonPosition]; 让 thisCell = tableView.cellForRowAtIndexPath(indexPath) }

  2. 如果你想访问可见的单元格的子视图

    let thisCell = tableView.cellForRowAtIndexPath(NSIndexPath.init(forRow: 0, inSection: 0))
    

【讨论】:

  • 我的问题是本地化在第一行运行良好,但到了第二行却崩溃了。
  • 如果您最多有 4 个单元格,那么它一定是超出范围的错误。这与本地化无关。
【解决方案4】:

哦.. 终于找到问题了。 email1 = txtemailaddress.text 因为我将 email1 声明为 complsary 意味着不为零。但是当页面加载文本框为空时,我尝试将 nil 值保存到 email1,这就是问题所在。终于解决了。

【讨论】:

    猜你喜欢
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2013-04-19
    相关资源
    最近更新 更多