2017-06-12 44 views
0

我有一个自定义的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! 

回答

5

什么在这里显示数据的问题。您将didPressButton委托中的索引值作为标记发送为参数。当您在这里获得代表中的索引值时,您只需显示其中的值即可。

假设您从cellForRowAtIndexPath中的数组中传递值,则只需按如下所示进行打印。

func didPressButton(_ tag: Int) { 
    print("I have pressed a button") 
    let contacts = self.contacts[tag] 
    print(contacts.givenName) 
} 

另外,不要忘记我其实使用名片框架来显示手机中的联系人设置YourCellDelegateUIViewController接口声明像class myViewController: UIViewController,YourCellDelegate {

+0

。现在我只想打印来自tableView的名称和电子邮件 –

+0

您能否使用完整的'cellForRowAtIndexPath'函数更新问题。想知道你是如何传递数据的。 – Bali

+0

我修改了帖子 –

1
func didPressButton(_ tag: Int) { 
    let selectedContact = self.contacts[tag] 

    // Now use `selectedContact` to fetch Name and Phone Number 
} 
相关问题