我有一个自定义的tableView有2个标签和一个按钮。 我想要做的是当我按下特定单元格中的按钮打印该单元格中的标签中的文本时。如何使用按钮打印自定义tableview的数据?
我已经使用委托来使按钮像这样工作。
**Protocol**
protocol YourCellDelegate : class {
func didPressButton(_ tag: Int)
}
**UITableViewCell**
class YourCell : UITableViewCell
{
weak var cellDelegate: YourCellDelegate?
// connect the button from your cell with this method
@IBAction func buttonPressed(_ sender: UIButton) {
cellDelegate?.didPressButton(sender.tag)
}
...
}
**cellForRowAt Function**
cell.cellDelegate = self
cell.tag = indexPath.row
**final Function**
func didPressButton(_ tag: Int) {
print("I have pressed a button")
}
现在我该怎样从特定的单元格中显示数据
非常感谢您的帮助
编辑
-getting contacts from phone-
lazy var contacts: [CNContact] = {
let contactStore = CNContactStore()
let keysToFetch = [
CNContactFormatter.descriptorForRequiredKeys(for: .fullName),
CNContactEmailAddressesKey,
CNContactImageDataAvailableKey] as [Any]
// Get all the containers
var allContainers: [CNContainer] = []
do {
allContainers = try contactStore.containers(matching: nil)
} catch {
print("Error fetching containers")
}
var results: [CNContact] = []
// Iterate all containers and append their contacts to our results array
for container in allContainers {
let fetchPredicate = CNContact.predicateForContactsInContainer(withIdentifier: container.identifier)
do {
let containerResults = try contactStore.unifiedContacts(matching: fetchPredicate, keysToFetch: keysToFetch as! [CNKeyDescriptor])
results.append(contentsOf: containerResults)
} catch {
print("Error fetching results for container")
}
}
return results
}()
-cellForRowAt-
let cell = tableView.dequeueReusableCell(withIdentifier: "PersonCell", for: indexPath) as? PersonCell
let contacts = self.contacts[indexPath.row]
cell?.updateUI(contact: contacts)
cell?.cellDelegate = self as? YourCellDelegate
cell?.tag = indexPath.row
return cell!
。现在我只想打印来自tableView的名称和电子邮件 –
您能否使用完整的'cellForRowAtIndexPath'函数更新问题。想知道你是如何传递数据的。 – Bali
我修改了帖子 –