添加 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
}
}
我的 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
}
}