我有一个集合视图,其中一些单元格代表一个联系人(他们的数据有一个电话号码和名称),我正在尝试将联系人添加到iPhone联系人。我已经从名为&#34的按钮创建了一个segue;添加联系人"它位于导航控制器的CollectionViewCell
内,并将其标识符设置为" ADD_CONTACT"。
在故事板中,我的segue有一个没有根视图控制器的导航控制器。
在视图控制器的prepareToSegue
中委托我的UICollectionView
我写了这段代码:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == ADD_CONTACT {
let dest = segue.destination as! UINavigationController
if let cell = sender as? SBInstructionCell {
if cell.isContact {
let newContact = CNMutableContact()
if let phone = cell.instructionBean?.contactAttachment?.phoneNumber{
newContact.phoneNumbers.append(CNLabeledValue(label: "home", value: CNPhoneNumber(stringValue: phone)))
}
if let name = cell.instructionBean?.contactAttachment?.contactName {
newContact.givenName.append(name)
}
let contactVC = CNContactViewController(forNewContact: newContact)
contactVC.contactStore = CNContactStore()
contactVC.delegate = self
dest.setViewControllers([contactVC], animated: false)
}
}
}
}
这会导致黑屏。
怎么解决这个问题?我想看CNContactViewController
答案 0 :(得分:1)
最终我使用Closures以不同的方法解决了这个问题。
在我的 var closureForContact: (()->())? = nil
中
我添加了这个var:
@IBAction func addContactTapped(_ sender: UIButton) {
if closureForContact != nil{
closureForContact!()
}
}
现在我在按钮的同一个单元格中执行了这个功能:
CollectionView
调用该函数。
在索引路径中的项目的 cell.closureForContact = {
if cell.isContact {
let newContact = CNMutableContact()
if let phone = cell.instructionBean?.contactAttachment?.phoneNumber{
newContact.phoneNumbers.append(CNLabeledValue(label: "home", value: CNPhoneNumber(stringValue: phone)))
}
if let name = cell.instructionBean?.contactAttachment?.contactName {
newContact.givenName.append(name)
}
let contactVC = CNContactViewController(forNewContact: newContact)
contactVC.contactStore = CNContactStore()
contactVC.delegate = self
contactVC.allowsEditing = true
contactVC.allowsActions = true
if let nav = self.navigationController {
nav.navigationBar.isTranslucent = false
nav.pushViewController(contactVC, animated: true)
}
}
}
单元格中,我设置了这样的闭包:
{{1}}
这完美无缺。我了解到,从单元格导航时,最好使用闭包。