我在自定义tableviewcell中有几个出口
class ShopTableViewCell: UITableViewCell {
@IBOutlet var orderName: UITextField!
@IBOutlet var specialinstructions: UITextField!
@IBOutlet var shopName: UITextField!
}
我有一个tableView,它是
class ConvenienceTableViewController: UITableViewController, UITextFieldDelegate {
override func viewDidLoad() {
super.viewDidLoad()
}
func barTapped() {
// I want to do some validation here, and getting the outlet's data from tableviewcell
}
}
我能想到获取插座数据的唯一方法是使用cellForRowAtIndexPath
cell.orderName
cell.specialinstructions
cell.shopName
但是我如何获得这些插座的数据并将其放入func barTapped
?
答案 0 :(得分:2)
let currentCell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: requiredRow, inSection: requiredSection)) as? ShopTableViewCell
let orderName = currentCell?.orderName
在barTapped
答案 1 :(得分:0)
假设barTapped
是分配给按钮的动作,则声明该方法正确地将按钮作为参数传递。由于表视图单元格通常是按钮调用superview
的超级视图,因此获取索引路径。然后,您可以直接从模型(数据源数组)获取数据,而不是从视图(单元格)获取数据。
func barTapped(button : UIButton) {
let cell = button.superview as! ShopTableViewCell
let indexPath = tableView.indexPathForCell(cell)
}
答案 2 :(得分:0)
正确的方法是使用DataSource中的数据,这是您为单元格提供的数据!
对于答案的第二部分,我假设你可以点击你单元格中的栏。
如果你想按自己的方式去做,那么可以使用代表:
protocol ShopTableViewCellDelegate {
func barTapped(cellFromDelegateMethod: ShopTableViewCell)
}
你可以在这样的单元格中调用它:
@IBAction func someBarTapped(sender: AnyObject) {
delegate?.barTapped(self)
}
然后
class ConvenienceTableViewController: UITableViewController, UITextFieldDelegate, ShopTableViewCellDelegate {
override func viewDidLoad() {
super.viewDidLoad()
}
func barTapped(cellFromDelegateMethod: ShopTableViewCell) {
//here you have your cell
}
}
(记得在ViewController中的某个位置设置此单元格的委托!)