使用swift 2.2进行Ios编程的新手
我想要实现的是在uitableviewcell或uitableviewcells中插入两个文本字段
例如,单元格中的文本将采用此格式
" A vs B"
我想在VS的两侧插入文本字段 所以我希望它看起来像这样#34; A [Textfield] vs [Textfield] B"
任何形式的帮助将不胜感激
答案 0 :(得分:3)
使用两个文本字段出口创建UITableViewCell的子类:
class TextFieldsCell: UITableViewCell {
@IBOutlet var textfield1: UITextField!
@IBOutlet var textfield2: UITextField!
}
在IB中,选择您的表格视图,并通过设置"原型单元格"将原型单元格添加到表格视图中。到" 1",在属性检查器中:
TextFieldsCell
的IBOutlets与相应的文本字段相关联:在包含表视图的视图控制器中,实现以下内容:
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
}
如果你正确设置了所有内容,你应该在下次运行中看到这一点:
答案 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
}
}
结果: