Sunday, November 8, 2026
HomeiOS Developmentios - Chosen row of tableView ought to stay chosen after dismiss...

ios – Chosen row of tableView ought to stay chosen after dismiss additionally in Swift

[ad_1]

I’m new to swift and i do not know the way to do that. If someone is aware of easy methods to do it then please assist.I’ve 2 view controllers. 1st is ViewController in which there’s a label and choose contact button. After I press choose contacts button it current AddContactVC there’s a desk view during which I fetched contacts identify, cellphone quantity,and nation code from simulator gadget utilizing import contacts. I can even choose a number of row . After choosing a number of rows when i press Performed button . This MyContactViewController get Dismiss and brings me again to the ViewController and all of the names of the contacts is available in label. Now downside is that this After I once more click on choose Contact button then beforehand chosen cell ought to seem chosen. Beneath is my code of AddContactVC

import UIKit
import ContactsUI

protocol phnContactDelegate :class
{
    func continueClickDelegae(groupMamberArr : NSMutableArray)
}
var arrayall : NSMutableArray = NSMutableArray()
class AddContactVC: UIViewController,CNContactPickerDelegate {
    @IBOutlet weak var contactATbl : UITableView!
    @IBOutlet weak var blurView : UIView!
    @IBOutlet weak var mainView : UIView!
    @IBOutlet weak var txtSearch : UITextField!
    @IBOutlet weak var btnCheck : UIButton!
    var objects  = [CNContact]()
    var arrName: [String] = ["Haifa","Ziad","Aditya","Robert","Joseph"]
    var arrPhn : [String] = ["+919473515614","+919473515614","+919473515614","+919473515614","+919473515614"]
    var arrayList = [PhnDS]();
    var mainarrayList = [PhnDS]();
    var presenter: AddContactPresenterProtocol?
    var search = false
    var searchArray = [CNContact]()
    var mobNum : String = ""
    var mobNumName : String = ""
    var cuntryCode : String = ""
//    var arrayall : NSMutableArray = NSMutableArray()
    var mainAll : NSMutableArray = NSMutableArray()
    
    weak var delegate: phnContactDelegate?
    override func viewDidLoad() {
        tremendous.viewDidLoad()
        self.contactATbl.allowsMultipleSelection = true
        let retailer = CNContactStore()
        self.retrieveContactsWithStore(retailer: retailer)
        self.txtSearch.delegate = self
//        self.getContacts()
        // Do any further setup after loading the view.
    }
    @IBAction func backClick(_ sender: Any) {
        if (arrayall.rely != 0) {
            delegate?.continueClickDelegae(groupMamberArr: arrayall)
        }
        
        self.dismiss(animated: true, completion: nil)
    }
    
    func getContacts() {
        let retailer = CNContactStore()

        swap CNContactStore.authorizationStatus(for: .contacts){
        case .approved:
            self.retrieveContactsWithStore(retailer: retailer)

        // That is the tactic we are going to create
        case .notDetermined:
            retailer.requestAccess(for: .contacts){succeeded, err in
                guard err == nil && succeeded else{
                    return
                }
                self.retrieveContactsWithStore(retailer: retailer)

            }
        default:
            print("Not dealt with")
        }

    }
    func retrieveContactsWithStore(retailer: CNContactStore)
    {


     let keysToFetch = [CNContactFormatter.descriptorForRequiredKeys(for: .fullName), CNContactPhoneNumbersKey,CNContactImageDataKey, CNContactEmailAddressesKey] as [Any]
        let request = CNContactFetchRequest(keysToFetch: keysToFetch as! [CNKeyDescriptor])
        var cnContacts = [CNContact]()
        do {
            strive retailer.enumerateContacts(with: request){
                (contact, cursor) -> Void in
                if (!contact.phoneNumbers.isEmpty) {
                }

                if contact.isKeyAvailable(CNContactImageDataKey) {
                    if let contactImageData = contact.imageData {
                        print(UIImage(information: contactImageData)) // Print the picture set on the contact
                    }
                } else {
                    // No Picture out there

                }
                if (!contact.emailAddresses.isEmpty) {
                }
                cnContacts.append(contact)
                 self.objects = cnContacts
            }
        } catch let error {
            NSLog("Fetch contact error: (error)")
        }

        NSLog(">>>> Contact checklist:")
        for contact in cnContacts {
            let fullName = CNContactFormatter.string(from: contact, model: .fullName) ?? "No Title"
            NSLog("(fullName): (contact.phoneNumbers.description)")
        }
       self.contactATbl.reloadData()
        }
    
    func disableBlurEffect() {
        self.blurView.removeFromSuperview()
        self.navigationController?.popViewController(animated: true)

    }
    func getCountryCallingCode(countryRegionCode:String)->String{

            let prefixCodes = ["AF": "93", "AE": "971", "AL": "355", "AN": "599", "AS":"1", "AD": "376", "AO": "244", "AI": "1", "AG":"1", "AR": "54","AM": "374", "AW": "297", "AU":"61", "AT": "43","AZ": "994", "BS": "1", "BH":"973", "BF": "226","BI": "257", "BD": "880", "BB": "1", "BY": "375", "BE":"32","BZ": "501", "BJ": "229", "BM": "1", "BT":"975", "BA": "387", "BW": "267", "BR": "55", "BG": "359", "BO": "591", "BL": "590", "BN": "673", "CC": "61", "CD":"243","CI": "225", "KH":"855", "CM": "237", "CA": "1", "CV": "238", "KY":"345", "CF":"236", "CH": "41", "CL": "56", "CN":"86","CX": "61", "CO": "57", "KM": "269", "CG":"242", "CK": "682", "CR": "506", "CU":"53", "CY":"537","CZ": "420", "DE": "49", "DK": "45", "DJ":"253", "DM": "1", "DO": "1", "DZ": "213", "EC": "593", "EG":"20", "ER": "291", "EE":"372","ES": "34", "ET": "251", "FM": "691", "FK": "500", "FO": "298", "FJ": "679", "FI":"358", "FR": "33", "GB":"44", "GF": "594", "GA":"241", "GS": "500", "GM":"220", "GE":"995","GH":"233", "GI": "350", "GQ": "240", "GR": "30", "GG": "44", "GL": "299", "GD":"1", "GP": "590", "GU": "1", "GT": "502", "GN":"224","GW": "245", "GY": "595", "HT": "509", "HR": "385", "HN":"504", "HU": "36", "HK": "852", "IR": "98", "IM": "44", "IL": "972", "IO":"246", "IS": "354", "IN": "91", "ID":"62", "IQ":"964", "IE": "353","IT":"39", "JM":"1", "JP": "81", "JO": "962", "JE":"44", "KP": "850", "KR": "82","KZ":"77", "KE": "254", "KI": "686", "KW": "965", "KG":"996","KN":"1", "LC": "1", "LV": "371", "LB": "961", "LK":"94", "LS": "266", "LR":"231", "LI": "423", "LT": "370", "LU": "352", "LA": "856", "LY":"218", "MO": "853", "MK": "389", "MG":"261", "MW": "265", "MY": "60","MV": "960", "ML":"223", "MT": "356", "MH": "692", "MQ": "596", "MR":"222", "MU": "230", "MX": "52","MC": "377", "MN": "976", "ME": "382", "MP": "1", "MS": "1", "MA":"212", "MM": "95", "MF": "590", "MD":"373", "MZ": "258", "NA":"264", "NR":"674", "NP":"977", "NL": "31","NC": "687", "NZ":"64", "NI": "505", "NE": "227", "NG": "234", "NU":"683", "NF": "672", "NO": "47","OM": "968", "PK": "92", "PM": "508", "PW": "680", "PF": "689", "PA": "507", "PG":"675", "PY": "595", "PE": "51", "PH": "63", "PL":"48", "PN": "872","PT": "351", "PR": "1","PS": "970", "QA": "974", "RO":"40", "RE":"262", "RS": "381", "RU": "7", "RW": "250", "SM": "378", "SA":"966", "SN": "221", "SC": "248", "SL":"232","SG": "65", "SK": "421", "SI": "386", "SB":"677", "SH": "290", "SD": "249", "SR": "597","SZ": "268", "SE":"46", "SV": "503", "ST": "239","SO": "252", "SJ": "47", "SY":"963", "TW": "886", "TZ": "255", "TL": "670", "TD": "235", "TJ": "992", "TH": "66", "TG":"228", "TK": "690", "TO": "676", "TT": "1", "TN":"216","TR": "90", "TM": "993", "TC": "1", "TV":"688", "UG": "256", "UA": "380", "US": "1", "UY": "598","UZ": "998", "VA":"379", "VE":"58", "VN": "84", "VG": "1", "VI": "1","VC":"1", "VU":"678", "WS": "685", "WF": "681", "YE": "967", "YT": "262","ZA": "27" , "ZM": "260", "ZW":"263"]
            let countryDialingCode = prefixCodes[countryRegionCode]
            return countryDialingCode!

    }
   
}

extension AddContactVC: AddContactProtocol
{
    
}
extension AddContactVC : UITableViewDelegate, UITableViewDataSource
{
    func tableView(_ tableView: UITableView, numberOfRowsInSection part: Int) -> Int {
       
        if search {
                        return searchArray.rely
                    } else {
                        return objects.rely
                    }
        
//        return self.objects.rely
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let indetifier =  "AddContactTableViewCell"
        let cell = tableView.dequeueReusableCell(withIdentifier: indetifier, for: indexPath) as! AddContactTableViewCell
        cell.selectionStyle = .none
       
        
        if search {
            
            let contact = self.searchArray[indexPath.row]
           print("theis my contact arrau (self.searchArray)")
            let formatter = CNContactFormatter()
            
           
       
            
            
            cell.lblName.textual content = formatter.string(from: contact )
            if let actualNumber = contact.phoneNumbers.first?.worth as? CNPhoneNumber {
                //Get the label of the cellphone quantity

                //Strip out the stuff you do not want
                print(actualNumber.stringValue)
                cell.lblphnNumber.textual content = actualNumber.stringValue
            }
            }
        else
        {
        
        let contact = self.objects[indexPath.row]
       print("theis my contact arrau (self.objects)")
        let formatter = CNContactFormatter()
        
       
   
        
        
        cell.lblName.textual content = formatter.string(from: contact )
        if let actualNumber = contact.phoneNumbers.first?.worth as? CNPhoneNumber {
            //Get the label of the cellphone quantity

            //Strip out the stuff you do not want
            print(actualNumber.stringValue)
            cell.lblphnNumber.textual content = actualNumber.stringValue
        }
        }
        return cell
    }
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    
        let picture = UIImage(named: "check_ic")! as UIImage
            if let cell = contactATbl.cellForRow(at: indexPath) as? AddContactTableViewCell
        {
                
                cell.btnCheck.setBackgroundImage(picture, for: .regular)
                let contact : CNContact
                if search
                {
                     contact = self.searchArray[indexPath.row]
                }
                else
                {
                     contact = self.objects[indexPath.row]
                }
                    
                
                
               print("theis my contact arrau (self.objects)")
                let formatter = CNContactFormatter()
              
                
                if let actualNumber = contact.phoneNumbers.first?.worth as? CNPhoneNumber {
                    //Get the label of the cellphone quantity

                    //Strip out the stuff you do not want
                    print(actualNumber.stringValue)
                    self.mobNum = actualNumber.stringValue
                    let MccNamVar = actualNumber.worth(forKey: "countryCode") as? String
                    
//                    let MccNamVar = formatter.string(from: contact )
//
                    let countryCode = getCountryCallingCode(countryRegionCode: MccNamVar?.uppercased() ?? "")
                    //change nation area Settings>>Basic>>Language&Area>>Area
                    
                    let fullName: String = actualNumber.stringValue
                   
                    let string = fullName
                    if string.accommodates(countryCode) {
                        let fullNameArr = fullName.parts(separatedBy: countryCode)


                        
                        let lastName: String = fullNameArr[1]

                        print("lastname", lastName)
                        self.mobNum = lastName
                    }
                    
                 
                    else  if string.prefix(1) == "0" {
                       
                        let fullNameArr = fullName.parts(separatedBy: string.prefix(1))
                        print("I discovered (string.prefix(0))") // I discovered He
                        let lastName: String = fullNameArr[1]

                        print("lastname", lastName)
                        self.mobNum = lastName
                    }

                    self.cuntryCode = countryCode
                  
                    self.mobNumName = contact.givenName
                    let phoneds  = PhnDS()
                    phoneds.country_code = self.cuntryCode
                    phoneds.phone_number = self.mobNum
                    phoneds.user_name = contact.givenName
                   
                    
                    self.arrayList.append(phoneds)

                    print("arrayList", self.arrayList.rely)
                    
                    for every in self.arrayList
                    {
                        let dict = NSMutableDictionary()
                        dict["country_code"] = every.country_code
                        dict["phone_number"] = every.phone_number.removeWhitespace()
                        dict["user_name"] = every.user_name

                        
                        let identify = every.user_name
                            if !arrayall.accommodates(dict) {
                                arrayall.add(dict)

                            }


                        print("arrll", arrayall)
                        
                    }

                }
            }
    
    
    }
    
    
    
    
    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        let picture = UIImage(named: "uncheck_ic")! as UIImage
            if let cell = contactATbl.cellForRow(at: indexPath) as? AddContactTableViewCell
        {
                cell.btnCheck.setBackgroundImage(picture, for: .regular)
                let dict = NSMutableDictionary()

                for every in self.arrayList
                {
                    dict["country_code"] = every.country_code
                    dict["phone_number"] = every.phone_number
                    dict["user_name"] = every.user_name

                   
                    
                }
                
                     if arrayall.accommodates(dict) {
                         print("dict must delet", dict)
                         arrayall.take away(dict)

                     }


                 print("arrll", arrayall)
            }
    }
    
}
extension AddContactVC : UITextFieldDelegate
{
    func textField(_ textField: UITextField, shouldChangeCharactersIn vary: NSRange, replacementString string: String) -> Bool {
        let searchStr = txtSearch.textual content ?? ""
        
        searchArray = objects.filter {$0.givenName.lowercased().prefix(searchStr.rely) == searchStr.lowercased()}
               search = true
        print("SearchArray", searchArray)
                if(searchStr == "")
        {
            search = false}
        else
        {
            search = true
        }
        
        self.contactATbl.reloadData()
    return true
    }
    
    func textFieldDidChangeSelection(_ textField: UITextField) {
        let searchStr = txtSearch.textual content ?? ""
        if(searchStr == "")
        {
            search = false}
        else
        {
            search = true
        }
        
        self.contactATbl.reloadData()
    }
    
    func textFieldDidEndEditing(_ textField: UITextField, motive: UITextField.DidEndEditingReason) {
    
        
    }
    
}

[ad_2]

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments