添加 UITextfield 作为单元格的附属视图

Adding UITextfield as cell's accessory view

我的 tableView 中有 4 个部分,每个部分都有一个单元格。当用户选择第四部分的单元格时,我希望他们在上面打字。所以我只是在 didSelectRow 函数中添加文本字段作为该单元格的 accessoryView,如下所示。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    if indexPath.section == 3 {

            //adding textField
            theTextField = UITextField(frame: CGRectMake(10, 480, 300, 40))
            theTextField.backgroundColor = UIColor.brownColor()
            theTextField.placeholder = "Please type here...."
            theTextField.textColor = UIColor.yellowColor()
            theTextField.layer.cornerRadius = 10.0
            selectedCell?.accessoryView = theTextField   
        }

但是当我点击它时,键盘隐藏了那个单元格。我希望 table 视图向上滚动。请帮我解决这个问题,或者如果有任何其他方法可以实现这个,请告诉我!

不清楚为什么要在 "didSelectRowAtIndexPath" 中实施单元规范,而更合乎逻辑的地方在 "cellForRowAtIndexPath" 中。我实现了您的代码,只是将第 3 节的单元格规范放在 cellForRowAtIndexPath 中,并且 table 单元格按预期向上滚动。请参阅下面的代码。要利用 table 视图滚动,需要在 cellRowForIndex 中定义单元格。为了满足您在评论中所述的 objective,您可以使用 .hidden 功能并插入代码,如图所示。

import UIKit

class: UITableViewController {

override func viewDidLoad() {
    super.viewDidLoad()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if indexPath.section == 3 {
        selectedCell.accessoryView?.backgroundColor = UIColor.brownColor()
        selectedCell.accessoryView?.hidden = false
    } else {
        selectedCell.accessoryView?.hidden = true
    }

}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
   return 4
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
    if indexPath.section == 3 {

        //adding textField
        var theTextField = UITextField(frame: CGRectMake(10, 480, 300, 40))
        theTextField.backgroundColor = UIColor.brownColor()
        theTextField.placeholder = "Please type here...."
        theTextField.textColor = UIColor.yellowColor()
        theTextField.layer.cornerRadius = 10.0
        cell.accessoryView = theTextField
        cell.accessoryView?.hidden = true
    }

    else {
        cell.textLabel!.text = "\(indexPath.section)"
    }

    return cell
}

}