Commit b62e173d authored by CZ1004's avatar CZ1004

联系人不完整联系人

parent afd5ac8a
{
"images" : [
{
"filename" : "btn_add_contact.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "btn_add_contact@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "btn_add_contact@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "ic_beifen.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ic_beifen@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ic_beifen@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "ic_delete_duplicates.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ic_delete_duplicates@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ic_delete_duplicates@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "ic_delete_email.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ic_delete_email@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ic_delete_email@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "ic_hebing.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ic_hebing@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ic_hebing@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "ic_no_duolicates.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ic_no_duolicates@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ic_no_duolicates@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "ic_ok_duolicates.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ic_ok_duolicates@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ic_ok_duolicates@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "ic_unsel_com_red.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ic_unsel_com_red@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ic_unsel_com_red@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
...@@ -234,7 +234,7 @@ extension ContactBackupDetailViewController:UITableViewDelegate,UITableViewDataS ...@@ -234,7 +234,7 @@ extension ContactBackupDetailViewController:UITableViewDelegate,UITableViewDataS
/// 给联系人分组排序 /// 给联系人分组排序
func sortContacts() { func sortContacts() {
sectionedContacts.removeAll()
for contact in self.dataSourceModel { for contact in self.dataSourceModel {
let firstLetter = pinyinFirstLetter(contact.name).uppercased() let firstLetter = pinyinFirstLetter(contact.name).uppercased()
if sectionedContacts[firstLetter] == nil { if sectionedContacts[firstLetter] == nil {
......
...@@ -66,6 +66,30 @@ class ContactBackupViewController : BaseViewController { ...@@ -66,6 +66,30 @@ class ContactBackupViewController : BaseViewController {
} }
self.setDefaultPage() self.setDefaultPage()
self.emptyView.newBackupCallback = {
// 备份数据
let vm = BackupViewModel()
// 备份之前先看看是否有可用的联系人
vm.backupAllContacts(self.dataSourceAllModel!.allContacts) { finished, error in
if let error = error {
Print("添加失败,\(error.localizedDescription)")
}
DispatchQueue.main.async {
// 再次请求数据 重新刷新页面
let buAlertVc = ContactBackUpCompletedAlertView(frame: self.view.bounds)
self.view.addSubview(buAlertVc)
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
buAlertVc.removeFromSuperview()
self.updateCurrentPageData()
}
}
}
}
} }
} }
...@@ -73,6 +97,11 @@ extension ContactBackupViewController { ...@@ -73,6 +97,11 @@ extension ContactBackupViewController {
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated) super.viewWillAppear(animated)
// 请求下数据 // 请求下数据
self.updateCurrentPageData()
}
func updateCurrentPageData(){
let vm = BackupViewModel() let vm = BackupViewModel()
vm.retrieveContactsFromBackup {[weak self] info, error in vm.retrieveContactsFromBackup {[weak self] info, error in
guard let self else {return} guard let self else {return}
...@@ -81,14 +110,21 @@ extension ContactBackupViewController { ...@@ -81,14 +110,21 @@ extension ContactBackupViewController {
return return
} }
// 备份是否有数据
DispatchQueue.main.async { DispatchQueue.main.async {
if info!.count <= 0 {
self.setDefaultPage()
}else{
self.setNormalPage() self.setNormalPage()
self.dataSourceModel = info self.dataSourceModel = info
self.normalView.dataSourceModel = info ?? [] self.normalView.dataSourceModel = info ?? []
self.normalView.dataSourceAllModel = self.dataSourceAllModel?.allContacts self.normalView.dataSourceAllModel = self.dataSourceAllModel?.allContacts
self.normalView.tableView.reloadData() self.normalView.tableView.reloadData()
} }
}
} }
} }
} }
...@@ -6,21 +6,36 @@ ...@@ -6,21 +6,36 @@
// //
import Foundation import Foundation
import SnapKit
class ContactIncompleteViewController : BaseViewController { class ContactIncompleteViewController : BaseViewController {
var dataSourceModel : [ContactModel]? private var widthConstraint: Constraint?
var dataSourceModel : [ContactModel] = []
lazy var navView : ContactNavView = { lazy var navView : ContactNavView = {
let view = ContactNavView() let view = ContactNavView()
return view return view
}() }()
lazy var selectAllButton : SelectAllButton = {
let view = SelectAllButton()
view.clipsToBounds = true
view.layer.cornerRadius = 16
return view
}()
lazy var emptyView : ContactNoIncomView = { lazy var emptyView : ContactNoIncomView = {
let view = ContactNoIncomView() let view = ContactNoIncomView()
return view return view
}() }()
lazy var normalView : ContactNormalIncomView = {
let view = ContactNormalIncomView()
return view
}()
// 默认页面 // 默认页面
func setDefaultPage(){ func setDefaultPage(){
...@@ -32,6 +47,16 @@ class ContactIncompleteViewController : BaseViewController { ...@@ -32,6 +47,16 @@ class ContactIncompleteViewController : BaseViewController {
make.bottom.equalToSuperview() make.bottom.equalToSuperview()
} }
} }
func setNormalPage(){
self.emptyView.removeFromSuperview()
self.view.addSubview(self.normalView)
self.normalView.snp.makeConstraints { make in
make.top.equalTo(self.navView.snp.bottom).offset(0)
make.left.right.equalToSuperview()
make.bottom.equalToSuperview()
}
}
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
...@@ -44,6 +69,50 @@ class ContactIncompleteViewController : BaseViewController { ...@@ -44,6 +69,50 @@ class ContactIncompleteViewController : BaseViewController {
make.height.equalTo(statusBarHeight + 44) make.height.equalTo(statusBarHeight + 44)
} }
self.navView.addSubview(self.selectAllButton)
self.selectAllButton.snp.makeConstraints { make in
make.right.equalTo(-15 * RScreenW())
make.centerY.equalTo(self.navView.backButton.snp.centerY)
widthConstraint = make.width.equalTo(115).constraint
make.height.equalTo(32)
}
self.selectAllButton.tapCallback = { isSelected in
// 选择之后,更新宽度约束的常量值
if isSelected {
self.normalView.selectedContacts = self.normalView.dataSourceModel
self.widthConstraint?.update(offset: 131)
}else {
self.normalView.selectedContacts.removeAll()
self.widthConstraint?.update(offset: 115)
}
self.normalView.updateDeleteButtonStatus()
// 强制重新布局
UIView.animate(withDuration: 0.3) {
self.selectAllButton.setNeedsLayout()
self.selectAllButton.layoutIfNeeded()
}
self.normalView.tableView.reloadData()
}
self.setDefaultPage() self.setDefaultPage()
} }
} }
extension ContactIncompleteViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if self.dataSourceModel.count > 0 {
self.setNormalPage()
self.normalView.dataSourceModel = self.dataSourceModel
DispatchQueue.main.async {
self.normalView.sortContacts()
self.normalView.subTitleLabel.text = "\(self.dataSourceModel.count) Contacts"
self.normalView.tableView.reloadData()
}
}else{
self.setDefaultPage()
}
}
}
...@@ -307,7 +307,7 @@ extension ContactAllView : UITableViewDataSource,UITableViewDelegate { ...@@ -307,7 +307,7 @@ extension ContactAllView : UITableViewDataSource,UITableViewDelegate {
/// 给联系人分组排序 /// 给联系人分组排序
func sortContacts() { func sortContacts() {
sectionedContacts.removeAll()
for contact in self.dataSourceModel { for contact in self.dataSourceModel {
let firstLetter = pinyinFirstLetter(contact.name).uppercased() let firstLetter = pinyinFirstLetter(contact.name).uppercased()
if sectionedContacts[firstLetter] == nil { if sectionedContacts[firstLetter] == nil {
......
...@@ -149,7 +149,7 @@ extension ContactBackUpNormalView : UITableViewDelegate,UITableViewDataSource{ ...@@ -149,7 +149,7 @@ extension ContactBackUpNormalView : UITableViewDelegate,UITableViewDataSource{
let alertVc = ContactDeleteAlertView() let alertVc = ContactDeleteAlertView()
alertVc.frame = (self?.responderViewController()?.view.bounds)! alertVc.frame = (self?.responderViewController()?.view.bounds)!
self?.responderViewController()?.view.addSubview(alertVc) self?.responderViewController()?.view.addSubview(alertVc)
alertVc.sureCallBack = { alertVc.sureCallBack = { isSure in
self?.dataSourceModel.remove(at: indexPath.section) self?.dataSourceModel.remove(at: indexPath.section)
// 删除整个部分而不是特定行 // 删除整个部分而不是特定行
self?.tableView.deleteSections(IndexSet(integer: indexPath.section), with: .automatic) self?.tableView.deleteSections(IndexSet(integer: indexPath.section), with: .automatic)
......
...@@ -8,6 +8,10 @@ ...@@ -8,6 +8,10 @@
import Foundation import Foundation
class ContactNoBackUpView : UIView { class ContactNoBackUpView : UIView {
var newBackupCallback : ()->Void = {}
lazy var titleLabel: UILabel = { lazy var titleLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.text = "Backups" label.text = "Backups"
...@@ -20,6 +24,12 @@ class ContactNoBackUpView : UIView { ...@@ -20,6 +24,12 @@ class ContactNoBackUpView : UIView {
lazy var imageView: UIImageView = { lazy var imageView: UIImageView = {
let imageView = UIImageView() let imageView = UIImageView()
imageView.image = UIImage(named: "btn_add_contact") imageView.image = UIImage(named: "btn_add_contact")
imageView.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer()
tap.addTarget(self, action: #selector(newBackup))
imageView.addGestureRecognizer(tap)
return imageView return imageView
}() }()
...@@ -79,4 +89,14 @@ class ContactNoBackUpView : UIView { ...@@ -79,4 +89,14 @@ class ContactNoBackUpView : UIView {
required init?(coder: NSCoder) { required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented") fatalError("init(coder:) has not been implemented")
} }
}
extension ContactNoBackUpView {
@objc func newBackup() {
self.newBackupCallback()
}
} }
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
import Foundation import Foundation
class ContactDeleteAlertView : UIView { class ContactDeleteAlertView : UIView {
var sureCallBack: ()->Void = {} var sureCallBack: (Bool)->Void = {isSure in}
// 懒加载背景视图 // 懒加载背景视图
private lazy var backgroundView: UIView = { private lazy var backgroundView: UIView = {
...@@ -160,6 +160,6 @@ class ContactDeleteAlertView : UIView { ...@@ -160,6 +160,6 @@ class ContactDeleteAlertView : UIView {
@objc private func sureAlert() { @objc private func sureAlert() {
self.removeFromSuperview() self.removeFromSuperview()
sureCallBack() sureCallBack(true)
} }
} }
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
import Foundation import Foundation
class ContactNavView : UIView { class ContactNavView : UIView {
private var backButton:UIButton! public var backButton:UIButton!
override init(frame: CGRect) { override init(frame: CGRect) {
......
//
// SelectAllButton.swift
// PhoneManager
//
// Created by edy on 2025/4/21.
//
import Foundation
class SelectAllButton : UIView {
var tapCallback : (Bool)->Void = {selected in }
private let imageView = UIImageView()
private let label = UILabel()
private var isSelectedValue = false
var isSelected: Bool {
get {
return isSelectedValue
}
set {
isSelectedValue = newValue
updateText()
}
}
override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setupView()
}
private func setupView() {
// 设置背景颜色
backgroundColor = UIColor(red: 0.95, green: 0.96, blue: 0.99, alpha: 1)
// 添加子视图
addSubview(imageView)
self.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer()
tap.addTarget(self, action: #selector(selectClick))
self.addGestureRecognizer(tap)
addSubview(label)
// 配置图片视图
imageView.contentMode = .scaleAspectFit
// 配置标签
label.font = UIFont.systemFont(ofSize: 14, weight: .bold)
label.textAlignment = .left
label.textColor = UIColor(red: 0.4, green: 0.4, blue: 0.4, alpha: 1)
// 使用 SnapKit 进行布局
imageView.snp.makeConstraints { make in
make.leading.equalToSuperview().offset(6)
make.centerY.equalToSuperview()
make.width.height.equalTo(20)
}
label.snp.makeConstraints { make in
make.leading.equalTo(imageView.snp.trailing).offset(8)
make.centerY.equalToSuperview()
make.trailing.lessThanOrEqualToSuperview().offset(-12)
}
// 初始更新文本
updateText()
}
func setImage(_ image: UIImage?) {
imageView.image = image
}
private func updateText() {
imageView.image = isSelected ? UIImage(named: "ic_close_similar") : UIImage(named: "ic_check_similar")
label.textColor = isSelected ? UIColor(red: 0.4, green: 0.4, blue: 0.4, alpha: 1) : UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
label.text = isSelected ? "Deselect All" : "Select All"
// 强制布局更新以适应新文本
setNeedsLayout()
layoutIfNeeded()
}
@objc func selectClick(){
self.isSelected = !self.isSelected
tapCallback(self.isSelected)
}
}
//
// ContactNormalIncomView.swift
// PhoneManager
//
// Created by edy on 2025/4/21.
//
import Foundation
class ContactNormalIncomView : UIView {
var dataSourceModel : [ContactModel] = []
/// 分组后的联系人
private var sectionedContacts: [String: [ContactModel]] = [:]
/// 联系人首字母数组
private var sectionTitles: [String] = []
/// 选择的联系人
var selectedContacts: [ContactModel] = []
var selectedIndex = 0
lazy var titleLabel: UILabel = {
let label = UILabel()
label.text = "Incomplete Contacts"
label.font = UIFont.systemFont(ofSize: 20, weight: .bold)
label.textColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1)
label.textAlignment = .left
return label
}()
lazy var subTitleLabel: UILabel = {
let label = UILabel()
label.text = "\(self.dataSourceModel.count) Contacts"
label.font = UIFont.systemFont(ofSize: 14, weight: .regular)
label.textColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1)
label.textAlignment = .left
return label
}()
lazy var tableView : UITableView = {
let tableView = UITableView(frame: CGRect(x: 0, y: 0, width: 0, height: 12), style: UITableView.Style.grouped)
tableView.dataSource = self
tableView.delegate = self
tableView.register(CustomContactAllViewTableViewCell.self, forCellReuseIdentifier: "CustomContactAllViewTableViewCell")
tableView.separatorStyle = .none
tableView.backgroundColor = .clear
tableView.showsVerticalScrollIndicator = false
if #available(iOS 15.0, *) {
tableView.sectionHeaderTopPadding = 0
}
return tableView
}()
lazy var deleteButton : DeleteButtonView = {
let deleteButton = DeleteButtonView()
// 设置删除按钮
deleteButton.layer.cornerRadius = 23
deleteButton.clipsToBounds = true
deleteButton.isHidden = true
return deleteButton
}()
override init(frame: CGRect) {
super.init(frame: frame)
self.addSubview(self.titleLabel)
self.addSubview(self.subTitleLabel)
self.addSubview(self.tableView)
self.addSubview(self.deleteButton)
self.titleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(15 * RScreenW())
make.top.equalToSuperview().offset(14 * RScreenH())
make.width.equalTo(345 * RScreenW())
make.height.equalTo(32)
}
self.subTitleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(15 * RScreenW())
make.top.equalTo(self.titleLabel.snp.bottom).offset(2 * RScreenH())
make.width.equalTo(345 * RScreenW())
make.height.equalTo(20)
}
self.tableView.snp.makeConstraints { make in
make.top.equalTo(self.subTitleLabel.snp.bottom).offset(16 * RScreenH())
make.left.equalToSuperview().offset(15 * RScreenW())
make.right.equalToSuperview().offset(-15 * RScreenW())
make.bottom.equalToSuperview().offset(-102 * RScreenH())
}
self.deleteButton.snp.makeConstraints { make in
make.top.equalTo(self.tableView.snp.bottom).offset(16 * RScreenH())
make.width.equalTo(345 * RScreenW())
make.height.equalTo(46)
make.centerX.equalToSuperview()
}
// 排序
self.sortContacts()
self.deleteButton.submitCallBack = {
self.alertWhenDeleteSomeOne()
}
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension ContactNormalIncomView : UITableViewDataSource,UITableViewDelegate {
func numberOfSections(in tableView: UITableView) -> Int {
return sectionTitles.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let sectionTitle = sectionTitles[section]
return sectionedContacts[sectionTitle]?.count ?? 0
}
func updateDeleteButtonStatus() {
DispatchQueue.main.async {
// 判断button是否显示
if self.selectedContacts.count > 0 {
// 设置button的title
self.deleteButton.titleLabel.text = "Delete \(self.selectedContacts.count) Contact"
self.deleteButton.isHidden = false
}else{
self.deleteButton.isHidden = true
}
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomContactAllViewTableViewCell", for: indexPath) as! CustomContactAllViewTableViewCell
let sectionTitle = sectionTitles[indexPath.section]
let contact = sectionedContacts[sectionTitle]?[indexPath.row]
cell.model = contact
cell.nameLabel.text = contact?.name
if self.selectedContacts.contains(where: { $0.identifier == contact!.identifier }) {
cell.selectButton.isSelected = true
}else {
cell.selectButton.isSelected = false
}
cell.buttonSelectCallBack = {[weak self] model,selected in
guard let self else {return}
if selected {
self.selectedContacts.append(model)
}else{
self.selectedContacts.removeAll(where: { $0.identifier == model.identifier })
}
updateDeleteButtonStatus()
}
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 77 + 8 * RScreenH()
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let label = UILabel(frame: CGRect(x: 0 , y: 0, width: 345, height: 20))
label.text = sectionTitles[section]
label.textAlignment = .left
label.font = UIFont.systemFont(ofSize: 14, weight: .bold)
label.textColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
return label
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 20
}
func alertWhenDeleteSomeOne() {
// 删除之前弹出是否真的需要删除
let alertVc = ContactDeleteAlertView()
alertVc.frame = (self.responderViewController()?.view.bounds)!
self.responderViewController()?.view.addSubview(alertVc)
alertVc.sureCallBack = {[weak self] isSure in
guard let self else {return}
if isSure {
self.deleteContacts()
}
}
}
func deleteContacts(){
// 删除逻辑
for contact in selectedContacts {
if let index = self.dataSourceModel.firstIndex(of: contact) {
self.dataSourceModel.remove(at: index)
}
for (key, var sectionContacts) in sectionedContacts {
if let index = sectionContacts.firstIndex(of: contact) {
sectionContacts.remove(at: index)
sectionedContacts[key] = sectionContacts
}
}
}
selectedContacts.removeAll()
sortContacts()
self.subTitleLabel.text = "\(self.dataSourceModel.count) Contacts"
self.updateDeleteButtonStatus()
self.tableView.reloadData()
// fixme: 需要从联系人列表中删除
// 删除完成 弹窗
let buAlertVc = ContactBackUpDeleteCompletedAlertView(frame: (self.responderViewController()?.view.bounds)!)
self.responderViewController()?.view.addSubview(buAlertVc)
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
buAlertVc.removeFromSuperview()
}
}
/// 给联系人分组排序
func sortContacts() {
sectionedContacts.removeAll()
for contact in self.dataSourceModel {
let firstLetter = pinyinFirstLetter(contact.name).uppercased()
if sectionedContacts[firstLetter] == nil {
sectionedContacts[firstLetter] = []
}
sectionedContacts[firstLetter]?.append(contact)
}
sectionTitles = sectionedContacts.keys.sorted()
for key in sectionTitles {
sectionedContacts[key] = sectionedContacts[key]?.sorted {
return pinyinFirstLetter($0.name).uppercased() < pinyinFirstLetter($1.name).uppercased()
}
}
}
// 获取拼音首字母
private func pinyinFirstLetter(_ string: String) -> String {
let mutableString = NSMutableString(string: string)
CFStringTransform(mutableString, nil, kCFStringTransformToLatin, false)
CFStringTransform(mutableString, nil, kCFStringTransformStripDiacritics, false)
var pinyin = mutableString as String
if pinyin.isEmpty {
return "#"
}
pinyin = pinyin.replacingOccurrences(of: " ", with: "")
return pinyin.isEmpty ? "#" : String(pinyin.first!).uppercased()
}
}
...@@ -123,7 +123,7 @@ extension ContactModuleView:UITableViewDataSource, UITableViewDelegate { ...@@ -123,7 +123,7 @@ extension ContactModuleView:UITableViewDataSource, UITableViewDelegate {
if indexPath.section == 1 { if indexPath.section == 1 {
// 跳转不完整联系人页面 // 跳转不完整联系人页面
let vc : ContactIncompleteViewController = ContactIncompleteViewController() let vc : ContactIncompleteViewController = ContactIncompleteViewController()
vc.dataSourceModel = self.dataSourceModel?.incompleteContacts vc.dataSourceModel = self.dataSourceModel!.incompleteContacts
self.responderViewController()?.navigationController?.pushViewController(vc, animated: true) self.responderViewController()?.navigationController?.pushViewController(vc, animated: true)
} }
if indexPath.section == 2 { if indexPath.section == 2 {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment