我有一个动态的Table作为UITableView并且所有的细胞都是正常的(从我的array中检索)
但是我只需要一个单元格作为TextView就可以输入文本。在文本更改时,我需要检索用户输入的文本。
怎么做这个?

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return array.count+1 //to allow this input field
    }

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if(indexPath.row < array.cont){
       //normal cell from array
        let cell =  Table.dequeueReusableCell(withIdentifier: "myCell")
        cell?.textLabel?.text = array[indexPath.row]
        cell?.isUserInteractionEnabled = true;
        cell?.textLabel?.adjustsFontSizeToFitWidth = true
        cell?.textLabel?.textAlignment = .center;
        return cell!;
    }else{
      //create input text field (DON'T KNOW HOW)
    }
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
      if(indexPath.row < array.cont){
              //.. perform action ..
       }else{
         //retrieve input text (DONT know How)
       }
 }

最佳答案

在内部创建UITextView非常简单:

let textView: UITextView = UITextView(frame: CGRect(x: 0, y: 20, width: 311.00, height: 50.00))  // Set frames as per requirements
textView.textAlignment = NSTextAlignment.justified
cell.contentView.addSubView(textView)

但这会导致滚动表时出现错误的值。最好的方法是创建一个自定义单元格并在其中添加UITableViewCell。这是自定义单元格。保持约束不变。
ios - Swift 4 UITableView使一个单元格成为UITextView-LMLPHP
在使用自定义单元格之前,需要在表中注册它。所以:
let nib = UINib(nibName: "TextCell", bundle: nil)
Table.register(nib, forCellReuseIdentifier: "TextCell")

不要忘记在XIB中放置单元格标识符。
ios - Swift 4 UITableView使一个单元格成为UITextView-LMLPHP
现在在cellForRowAtIndexPath:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if(indexPath.row < array.cont){
       //normal cell from array
        let cell =  Table.dequeueReusableCell(withIdentifier: "myCell")
        cell?.textLabel?.text = array[indexPath.row]
        cell?.isUserInteractionEnabled = true;
        cell?.textLabel?.adjustsFontSizeToFitWidth = true
        cell?.textLabel?.textAlignment = .center;
        return cell!;
    }else{
      //create input text field (DON'T KNOW HOW)
      let cell = tableView.dequeueReusableCell(withIdentifier: "TextCell", for: indexPath) as! TextCell
      // Access UITextView by cell.textView
      return cell
    }
}

主要问题是-根据UITextView高度的动态单元格大小。但这完全取决于你的要求。你可以关注this的帖子。

关于ios - Swift 4 UITableView使一个单元格成为UITextView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49721001/

10-12 14:35
查看更多