Ama*_*wla 0 uibutton uitableview ios swift3
我有一个自定义tableView,有2个标签和一个按钮.我想要做的是当我按下特定单元格中的按钮时,打印该单元格中标签的文本.
我使用委托使按钮像这样工作.
**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")
}
Run Code Online (Sandbox Code Playgroud)
现在我如何显示来自该特定单元格的数据
非常感谢你的帮助
编辑
-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!
Run Code Online (Sandbox Code Playgroud)
这里显示数据的问题是什么.您将索引值didPressButton作为参数发送为委托中的标记.当您在此处获取委托中的索引值时,您只需显示其中的值.
假设您从数组中传递值cellForRowAtIndexPath,您只需要按如下方式打印它.
func didPressButton(_ tag: Int) {
print("I have pressed a button")
let contacts = self.contacts[tag]
print(contacts.givenName)
}
Run Code Online (Sandbox Code Playgroud)
另外,别忘了YourCellDelegate在UIViewController类似的接口声明中设置class myViewController: UIViewController,YourCellDelegate {
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |