2017-07-31 104 views
0

我有一個集合視圖,其中一些單元格表示聯繫人(他們的數據有一個電話號碼和名稱),我試圖將聯繫人添加到iPhone聯繫人。我從CollectionViewCell中的一個名爲「添加聯繫人」的按鈕創建了一個segue到導航控制器,並將其標識符設置爲「ADD_CONTACT」。
在故事板中,我的segue有一個沒有根視圖控制器的導航控制器。 在代表我的UICollectionView我寫了這個代碼視圖控制器的prepareToSegue安裝導航控制器視圖控制器作爲CNContactViewController黑色屏幕

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

回答

1

最終我用不同的方法使用閉包解決了這個問題。在同一個單元格我的按鈕的動作

var closureForContact: (()->())? = nil 

現在我有這個FUNC:

在我UICollectionViewCell 我加入這個變種

@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) 
          } 
         } 
        } 

這完美地工作。我瞭解到,從單元格導航,最好使用閉包。

相關問題