将文本字段添加到UITableview单元格

时间:2016-07-10 15:05:22

标签: ios uitableview swift2

使用swift 2.2进行Ios编程的新手

我想要实现的是在uitableviewcell或uitableviewcells中插入两个文本字段

例如,单元格中的文本将采用此格式

" A vs B"

我想在VS的两侧插入文本字段  所以我希望它看起来像这样#34; A [Textfield] vs [Textfield] B"

任何形式的帮助将不胜感激

3 个答案:

答案 0 :(得分:3)

  1. 使用两个文本字段出口创建UITableViewCell的子类:

    class TextFieldsCell: UITableViewCell {
        @IBOutlet var textfield1: UITextField!
        @IBOutlet var textfield2: UITextField!
    }
    
  2. 在IB中,选择您的表格视图,并通过设置"原型单元格"将原型单元格添加到表格视图中。到" 1",在属性检查器中:

  3. enter image description here

    1. 在IB中,使用autolayout布置单元格内的文本字段。 (跳过autolayout实现的细节)
    2. enter image description here

      1. 在IB中,选择您的表格查看单元格,然后更改它"标识符" to" TextFieldsCell",在属性检查器中:
      2. enter image description here

        1. 在IB中,选择您的表格查看单元格,然后更改它" Class" to" TextFieldsCell",在身份检查员中:
        2. enter image description here

          1. 在IB中,将TextFieldsCell的IBOutlets与相应的文本字段相关联:
          2. enter image description here

            1. 在包含表视图的视图控制器中,实现以下内容:

              func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                  return 2;
              }
              
              func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
                  let cell: TextFieldsCell = tableView.dequeueReusableCellWithIdentifier("TextFieldsCell") as! TextFieldsCell
                  return cell
              }
              
            2. 如果你正确设置了所有内容,你应该在下次运行中看到这一点:

            3. enter image description here

答案 1 :(得分:0)

执行以下操作:

  • 创建一个新类并使其成为UITableViewCell的子类,并将其称为MyTableViewCell。

  • 在Storyboard文件中单击tableView,然后在右侧面板中单击属性检查器,选择原型单元格:1。

  • 单击新创建的单元格,然后在属性检查器中选择标识符名称(例如,“myCellID”)。然后在身份检查器中设置类属性MyTableViewCell。

  • 将textFields拖放到您的单元格,然后使用助理编辑器,按住Ctrl键并从textFields拖动到您的UITableViewCell子类。它应该为textFields创建出口。

  • 在ViewController中,让您的类实现UITableViewDataSource协议并覆盖tableView(_: numberOfRowsInSection:)tableview(_: cellForRowAtIndexPath:)。然后在后一种方法中写:

    让myCell = tableView.dequeueReusableCellWithIdentifier(“myCellID”)为! MyTableViewCell 返回myCell

即使我们没有为您创建的文本字段使用插座,您也需要在某些时候使用它们来预先填充内容,设置目标操作方法等。

答案 2 :(得分:0)

如果你想完全从代码中完成:

import UIKit

struct MatchInfo {
    var teamA: String
    var teamB: String
}

class ViewController: UIViewController, UITableViewDataSource {
    @IBOutlet weak var tableView: UITableView!

    var matches = [MatchInfo]()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.dataSource = self

        // Add some data
        matches.append(MatchInfo(teamA: "Panthers", teamB: "Broncos"))
        matches.append(MatchInfo(teamA: "Bucaneers", teamB: "Falcons"))
        matches.append(MatchInfo(teamA: "Vikings", teamB: "Titans"))
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }


    // MARK: -
    // MARK: Table View Data Source Delegate
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return matches.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("myCell") ?? makeCell()

        let textFieldA = cell.viewWithTag(1) as! UITextField
        let textFieldB = cell.viewWithTag(2) as! UITextField

        let row = indexPath.row
        textFieldA.text = matches[row].teamA
        textFieldB.text = matches[row].teamB

        return cell
    }

    func makeCell() -> UITableViewCell {
        let textFieldA = UITextField(frame: CGRectZero)
        let textfieldB = UITextField(frame: CGRectZero)

        textFieldA.tag = 1
        textfieldB.tag = 2
        [textFieldA, textfieldB].forEach {
            $0.translatesAutoresizingMaskIntoConstraints = false
            $0.borderStyle = .RoundedRect
        }

        let vsLabel = UILabel(frame: CGRectZero)
        vsLabel.text = "vs."
        vsLabel.translatesAutoresizingMaskIntoConstraints = false

        let cell = UITableViewCell(style: .Default, reuseIdentifier: "myCell")
        [textFieldA, textfieldB, vsLabel].forEach { cell.contentView.addSubview($0) }

        // Layout the elements
        let views = ["A": textFieldA, "B": textfieldB, "vs": vsLabel]
        let c1 = NSLayoutConstraint.constraintsWithVisualFormat("H:[A]-8-[vs]-8-[B]", options: .AlignAllBaseline, metrics: nil, views: views)
        let c2 = NSLayoutConstraint(item: textFieldA, attribute: .Left, relatedBy: .Equal, toItem: cell.layoutMarginsGuide, attribute: .Left, multiplier: 1, constant: 0)
        let c3 = NSLayoutConstraint(item: textfieldB, attribute: .Right, relatedBy: .Equal, toItem: cell, attribute: .Right, multiplier: 1, constant: 0)
        let c4 = NSLayoutConstraint(item: textFieldA, attribute: .CenterY, relatedBy: .Equal, toItem: cell.contentView, attribute: .CenterY, multiplier: 1, constant: 0)
        let c5 = NSLayoutConstraint(item: textFieldA, attribute: .Width, relatedBy: .Equal, toItem: textfieldB, attribute: .Width, multiplier: 1, constant: 0)

        NSLayoutConstraint.activateConstraints(c1 + [c2, c3, c4, c5])

        return cell
    }
}

结果:

Result