Kunal Parekh
Kunal Parekh

Reputation: 380

Swift 3: Filtering results with ID's and reload tableview

I am trying to figure how to filter the data and reload the tableview.

I have 4 regions (North, South, East and West) and all.

By default, it will show all the profiles.

If I press North (i.e. 1), it should only filter profiles available in the North Region

Similarly, with south, east and west. Depending on the region pressed, it should filter the profile.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
    if indexPath.section == 0
    {
        let cell = self.businessTableView.dequeueReusableCell(withIdentifier: "businessCell", for: indexPath) as! BusinessCell
        
        let tableObjects:StorageSubCatagoriezTwo = subCatagorizeDataTwo[indexPath.row]
        
        let charCheck = (tableObjects.address).replacingOccurrences(of: " ", with: "")
        cell.businessWebView.scrollView.isScrollEnabled = false
        
        var strings = ""
        
        if regId == 1
        {
            cell.businessName.text = " "
            let tableObjects:StorageSubCatagoriezTwoNorth = subCatagorizeDataTwoN[indexPath.row]
            
            if tableObjects.address.characters.isEmpty != true
            {
                 strings = strings+(tableObjects.nameString.characters.count > 0 ? "<font size=\"3\"><b>"+tableObjects.nameString+"</b></font><br>" : "")
            }
            else
            {
                //nothing
            }
            if tableObjects.telephone.characters.isEmpty != true
            {
                strings = strings+(tableObjects.telephone.characters.count > 0 ? "<img style='width:22px; height:22px;' src=\"http://getmydetails.pe.hu/img/mobile.gif\"> "+tableObjects.telephone+"<br>" : "")
            }
            else
            {
                
            }
            if tableObjects.email.characters.isEmpty != true
            {
                strings = strings+(tableObjects.email.characters.count > 0 ? "<img style='width:22px; height:22px;'  src=\"http://localbluepages.com.au/images/icons/email.gif\"> "+tableObjects.email+"<br>" : "")
            }
            else
            {
                
            }
            if tableObjects.website.characters.isEmpty != true{
                 strings = strings+(tableObjects.website.characters.count > 0 ? "<img style='width:22px; height:22px;'  src=\"http://getmydetails.pe.hu/img/website.gif\"> "+tableObjects.website : "")
            }
            else{
                
            }
        }
        else if regId == 2
        {
            cell.businessName.text = " "
            let tableObjects:StorageSubCatagoriezTwoEast = subCatagorizeDataTwoE[indexPath.row]
            //cell.businessName.text = tableObjects.nameString
            if tableObjects.address.characters.isEmpty != true
            {
              //  cell.businessName.text = tableObjects.nameString
                strings = strings+(tableObjects.nameString.characters.count > 0 ? "<font size=\"3\"><b>"+tableObjects.nameString+"</b></font><br>" : "")
            }
            else
            {
                //nothing
            }
            if tableObjects.telephone.characters.isEmpty != true
            {
                strings = strings+(tableObjects.telephone.characters.count > 0 ? "<img style='width:22px; height:22px;' src=\"http://getmydetails.pe.hu/img/mobile.gif\"> "+tableObjects.telephone+"<br>" : "")
            }
            else
            {
                
            }
            if tableObjects.email.characters.isEmpty != true
            {
                strings = strings+(tableObjects.email.characters.count > 0 ? "<img style='width:22px; height:22px;'  src=\"http://localbluepages.com.au/images/icons/email.gif\"> "+tableObjects.email+"<br>" : "")
            }
            else
            {
                
            }
            if tableObjects.website.characters.isEmpty != true{
                strings = strings+(tableObjects.website.characters.count > 0 ? "<img style='width:22px; height:22px;'  src=\"http://getmydetails.pe.hu/img/website.gif\"> "+tableObjects.website : "")
            }
            else{
                
            }
        }
        else if regId == 3
        {
            cell.businessName.text = " "
            let tableObjects:StorageSubCatagoriezTwoSouth = subCatagorizeDataTwoS[indexPath.row]
           // cell.businessName.text = tableObjects.nameString
            if tableObjects.address.characters.isEmpty != true
            {
                //cell.businessName.text = tableObjects.nameString
                strings = strings+(tableObjects.nameString.characters.count > 0 ? "<font size=\"3\"><b>"+tableObjects.nameString+"</b></font><br>" : "")
            }
            else
            {
                //nothing
            }
            if tableObjects.telephone.characters.isEmpty != true
            {
                strings = strings+(tableObjects.telephone.characters.count > 0 ? "<img style='width:22px; height:22px;' src=\"http://getmydetails.pe.hu/img/mobile.gif\"> "+tableObjects.telephone+"<br>" : "")
            }
            else
            {
                
            }
            if tableObjects.email.characters.isEmpty != true
            {
                strings = strings+(tableObjects.email.characters.count > 0 ? "<img style='width:22px; height:22px;'  src=\"http://localbluepages.com.au/images/icons/email.gif\"> "+tableObjects.email+"<br>" : "")
            }
            else
            {
                
            }
            if tableObjects.website.characters.isEmpty != true{
                strings = strings+(tableObjects.website.characters.count > 0 ? "<img style='width:22px; height:22px;'  src=\"http://getmydetails.pe.hu/img/website.gif\"> "+tableObjects.website : "")
            }
            else{
                
            }
        }
        else if regId == 4
        {
            cell.businessName.text = " "
            let tableObjects:StorageSubCatagoriezTwoWest = subCatagorizeDataTwoW[indexPath.row]
        //    cell.businessName.text = tableObjects.nameString
            if tableObjects.address.characters.isEmpty != true
            {
              //  cell.businessName.text = tableObjects.nameString
                strings = strings+(tableObjects.nameString.characters.count > 0 ? "<font size=\"3\"><b>"+tableObjects.nameString+"</b></font><br>" : "")
            }
            else
            {
                //nothing
            }
            if tableObjects.telephone.characters.isEmpty != true
            {
                strings = strings+(tableObjects.telephone.characters.count > 0 ? "<img style='width:22px; height:22px;' src=\"http://getmydetails.pe.hu/img/mobile.gif\"> "+tableObjects.telephone+"<br>" : "")
            }
            else
            {
                
            }
            if tableObjects.email.characters.isEmpty != true
            {
                strings = strings+(tableObjects.email.characters.count > 0 ? "<img style='width:22px; height:22px;'  src=\"http://localbluepages.com.au/images/icons/email.gif\"> "+tableObjects.email+"<br>" : "")
            }
            else
            {
                
            }
            if tableObjects.website.characters.isEmpty != true{
                strings = strings+(tableObjects.website.characters.count > 0 ? "<img style='width:22px; height:22px;'  src=\"http://getmydetails.pe.hu/img/website.gif\"> "+tableObjects.website : "")
            }
            
        }
        else{
            let tableObjects:StorageSubCatagoriezTwo = subCatagorizeDataTwo[indexPath.row]
            cell.businessName.text = tableObjects.nameString
            
            let charCheck = (tableObjects.address).replacingOccurrences(of: " ", with: "")
            print(charCheck)
            cell.businessName.text = " "
            
            var strings = ""
            
            strings = strings+(tableObjects.nameString.characters.count > 0 ? "<font size=\"3\"><b>"+tableObjects.nameString+"</b></font><br>" : "")
            strings = strings+(tableObjects.nameString.characters.count > 0 ? "<font size=\"3\"><b>"+tableObjects.address+"</b></font><br>" : "")
            // strings = strings+(tableObjects.address.characters.count > 0 ? "<img src=\"http://getmydetails.pe.hu/img/yt.jpg\"> "+tableObjects.address+"<br>" : "")
            
            strings = strings+(tableObjects.telephone.characters.count > 0 ? "<img style='width:22px; height:22px;' src=\"http://getmydetails.pe.hu/img/mobile.gif\"> "+tableObjects.telephone+"<br>" : "")
            
            strings = strings+(tableObjects.email.characters.count > 0 ? "<img style='width:22px; height:22px;'  src=\"http://getmydetails.pe.hu/img/email.gif\"> "+tableObjects.email+"<br>" : "")
            
            strings = strings+(tableObjects.website.characters.count > 0 ? "<img style='width:22px; height:22px;'  src=\"http://getmydetails.pe.hu/img/website.gif\"> "+tableObjects.website : "")
            
            // cell.businessWebView.loadHTMLString("<font size=\"5\"><b>"+tableObjects.nameString+"</b></font><br><img src=\"http://getmydetails.pe.hu/img/yt.jpg\"> "+tableObjects.address+"<br><img src=\"http://getmydetails.pe.hu/img/mobile.gif\"> "+tableObjects.telephone+"<br><img src=\"http://getmydetails.pe.hu/img/email.gif\"> "+tableObjects.email+"<br><img src=\"http://getmydetails.pe.hu/img/website.gif\"> "+tableObjects.website, baseURL: nil)
            
            cell.businessWebView.loadHTMLString(strings, baseURL: nil)
            let heightIndex = strings.components(separatedBy: "<br>")
            let heightMul = heightIndex.count
            print(heightMul*32)
            
            self.heightOfTheCell = CGFloat(((heightMul)*32)+4)
            
            
        }
        return cell
    }
    else if indexPath.section == 1
    {
        let cell = self.businessTableView.dequeueReusableCell(withIdentifier: "businessCell2")
        cell?.textLabel?.textAlignment = .center
        switch regId
        {
        case 0:
            if subCatagorizeDataTwo.count != forAll
            {
                cell?.textLabel?.text = "LOAD MORE DATA"
                cell?.textLabel?.textColor = Color.whiteColor
                cell?.backgroundColor = UIColor.darkGray
                
            }else{
                cell?.textLabel?.text = "NO MORE FOUND!"
                cell?.textLabel?.textColor = UIColor.darkGray
                cell?.backgroundColor = UIColor.gray
                cell?.selectionStyle = UITableViewCellSelectionStyle.none
            }
        case 1:
            if subCatagorizeDataTwoN.count != forN
            {
                cell?.textLabel?.text = "LOAD MORE DATA"
                cell?.textLabel?.textColor = Color.whiteColor
                cell?.backgroundColor = UIColor.darkGray
                
            }else{
                cell?.textLabel?.text = "NO MORE FOUND!"
                cell?.textLabel?.textColor = UIColor.darkGray
                cell?.backgroundColor = UIColor.gray
                cell?.selectionStyle = UITableViewCellSelectionStyle.none
            }
        case 2:
            if subCatagorizeDataTwoE.count != forE
            {
                cell?.textLabel?.text = "LOAD MORE DATA"
                cell?.textLabel?.textColor = Color.whiteColor
                cell?.backgroundColor = UIColor.darkGray
                
            }else{
                cell?.textLabel?.text = "NO MORE FOUND!"
                cell?.textLabel?.textColor = UIColor.darkGray
                cell?.backgroundColor = UIColor.gray
                cell?.selectionStyle = UITableViewCellSelectionStyle.none
            }
        case 3:
            if subCatagorizeDataTwoS.count != forS
            {
                cell?.textLabel?.text = "LOAD MORE DATA"
                cell?.textLabel?.textColor = Color.whiteColor
                cell?.backgroundColor = UIColor.darkGray
                
            }else{
                cell?.textLabel?.text = "NO MORE FOUND!"
                cell?.textLabel?.textColor = UIColor.darkGray
                cell?.backgroundColor = UIColor.gray
                cell?.selectionStyle = UITableViewCellSelectionStyle.none
            }
        case 4:
            if subCatagorizeDataTwoW.count != forW
            {
                cell?.textLabel?.text = "LOAD MORE DATA"
                cell?.textLabel?.textColor = Color.whiteColor
                cell?.backgroundColor = UIColor.darkGray
                
            }else{
                cell?.textLabel?.text = "NO MORE FOUND!"
                cell?.textLabel?.textColor = UIColor.darkGray
                cell?.backgroundColor = UIColor.gray
                cell?.selectionStyle = UITableViewCellSelectionStyle.none
            }
            
        default:break
        }
        
        return cell!
    }
    else
    {
        let tableObjects:StorageSubCatagoriez3rd = SubCatagoriez3rd[indexPath.row]
        let cell = self.businessTableView.dequeueReusableCell(withIdentifier: "businessCell3")
        cell?.textLabel?.text = tableObjects.nameString
        return cell!
    }
}

Please see the screenshot:

When Displaying all

When Displaying South Region

And, as seen in the second Screenshot (South Region) the profile was meant to be hidden as it belongs to North region.

Please let me know how can I fix this.

Thanks for the time :)

Model:

class StorageSubCatagoriezTwo
{
var nameString:String
var idString:String
var address:String
var telephone:String
var email:String
var website:String

init(tempName:String,tempID:String,tempaddress:String,tempTelephone:String,tempEmail:String,tempWebsite:String)
{
    self.nameString = tempName.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.idString  = tempID.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.address = tempaddress.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.telephone = tempTelephone.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.email = tempEmail.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.website = tempWebsite.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
}
}

    class StorageSubCatagoriezTwoNorth

{
var nameString:String
var idString:String
var address:String
var telephone:String
var email:String
var website:String

init(tempName:String,tempID:String,tempaddress:String,tempTelephone:String,tempEmail:String,tempWebsite:String)
    {
    self.nameString = tempName.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.idString  = tempID.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.address = tempaddress.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.telephone = tempTelephone.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.email = tempEmail.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.website = tempWebsite.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
}
}

class StorageSubCatagoriezTwoEast
{
var nameString:String
var idString:String
var address:String
var telephone:String
var email:String
var website:String

init(tempName:String,tempID:String,tempaddress:String,tempTelephone:String,tempEmail:String,tempWebsite:String)
{
    self.nameString = tempName.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.idString  = tempID.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.address = tempaddress.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.telephone = tempTelephone.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.email = tempEmail.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.website = tempWebsite.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
}
}

class StorageSubCatagoriezTwoWest
{
var nameString:String
var idString:String
var address:String
var telephone:String
var email:String
var website:String

init(tempName:String,tempID:String,tempaddress:String,tempTelephone:String,tempEmail:String,tempWebsite:String)
{
    self.nameString = tempName.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.idString  = tempID.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.address = tempaddress.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.telephone = tempTelephone.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.email = tempEmail.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.website = tempWebsite.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)    }
}

class StorageSubCatagoriezTwoSouth
{
var nameString:String
var idString:String
var address:String
var telephone:String
var email:String
var website:String

init(tempName:String,tempID:String,tempaddress:String,tempTelephone:String,tempEmail:String,tempWebsite:String)
{
    self.nameString = tempName.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.idString  = tempID.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.address = tempaddress.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.telephone = tempTelephone.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.email = tempEmail.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
    self.website = tempWebsite.trimmingCharacters(in:  CharacterSet.whitespacesAndNewlines)
}
}

Fetching Region and Assigning to the var:

let id = String(describing: dictionary["id"]!)
                        let name = String(describing: dictionary["BUSINESS_NAME"]!)
                        let email = String(describing: dictionary["EMAIL"]!)
                        var streetNo = String(describing: dictionary["STREET_NO"]!)
                        var streetName = String(describing: dictionary["STREET_NAME"]!)
                        var suburbID = String(describing: dictionary["SUBURB_ID"]!)
                        var postCode = String(describing: dictionary["POSTCODE"]!)
                        let regionID = String(describing: dictionary["REGION_ID"]!)
                        var landline = String(describing: dictionary["PHONE_FIXED"]!)
                        var mobile = String(describing: dictionary["PHONE_MOBILE"]!)
                        let website = String(describing: dictionary["WEBURL"]!)
                        var suburbName = String(describing: dictionary["Suburb"]!)
                        let streedNoHide = String(describing: dictionary["STREET_NO_HIDDEN"]!)
                        let streetNameHide = String(describing: dictionary["STREET_NAME_HIDDEN"]!)
                        let suburbHide = String(describing: dictionary["SUBURB_HIDDEN"]!)
                        let postCodeHide = String(describing: dictionary["POSTCODE_HIDDEN"]!)
                        let mobileHide = String(describing: dictionary["PHONE_MOBILE_HIDDEN"]!)
                        let landlineHide = String(describing: dictionary["PHONE_FIXED_HIDDEN"]!)

JSON DATA: (REGION_ID)

enter image description here

Upvotes: 0

Views: 936

Answers (1)

Surjeet Singh
Surjeet Singh

Reputation: 11949

1) Their should be 2 different array.

var mainArray = [StorageSubCatagories]()
var filteredArray = [StorageSubCatagories]()

1st array to having all objects. (mainArray)

2nd array to have only filtred objects from main array. (filteredArray)

2) You should use common class like 'StorageSubCatagories' to parse all data instead of using multiple classes like StorageSubCatagoriezTwo, StorageSubCatagoriezTwoNorth, StorageSubCatagoriezTwoEast...etc, and store all objects into a single array like below:

3) This function will return you filtered data according to button selection. For button all pass regionId = 0, and for north regionId = 1,.... as per your values.

 func fetchResultForSelection(_ regionId: Int) -> [StorageSubCatagories] {
       if regionId == 0 {
           return mainArray
       } 
       let tempArray = mainArray.filter { $0.regId == regionId }
       return tempArray
    } 

add objects of array returned from this function into filteredArray after removing previous objects.

4) Always display your table data based on filteredArray instead of mainArray.

Hope this help you.

Upvotes: 0

Related Questions