Почему изначально сегментированные значения индекса таблицы 0 не загружаются в Swift? - PullRequest
0 голосов
/ 02 февраля 2020

Я использую HMSegmentedControl. когда я запускаю табличное представление показывает пустое, когда я нажимаю на index 1, тогда табличное представление показывает .. теперь, когда я перешел к index 0 показываются значения табличного представления. Почему изначально я не получаю данные просмотра таблицы в index 0.

, вот код:

 import UIKit
 import HMSegmentedControl

 class PlansPrepaidViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

  @IBOutlet weak var tableView: UITableView!

   let segmentedControl = HMSegmentedControl(sectionTitles: ["POPULAR", "SPECIAL RECHARGE", "TOP UP", "2G/3G/4G DATA", "FULL TALKTIME", "ROAMING"])
  var sortedArray = [Any]()

  let talktimeArray = ["26.66", "500.00","26.66", "500.00","26.66", "500.00","26.66", "500.00"]
  let validityArray = ["42 Days", "28 Days", "52 Days", "18 Days", "76 Days", "23 Days", "42 Days", "120 Days"]

  override func viewDidLoad() {
      super.viewDidLoad()
      tableView.delegate = self
      tableView.dataSource = self

      designSegmentedControl()
  }

    //for  segment
     func designSegmentedControl(){

     segmentedControl?.frame = CGRect(x: 10, y: 60, width: 500, height: 60)

         segmentedControl?.backgroundColor = UIColor(red: 4/255, green: 118/255, blue: 208/255, alpha: 1.0)
         segmentedControl?.selectionIndicatorLocation = .down
         segmentedControl?.selectionIndicatorHeight = 2.5

         segmentedControl?.indexChangeBlock = { index in
             print(index)
             if index == 0{

              self.sortedArray = self.validityArray.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
              print("segmnent 0 \(self.sortedArray)")
             }

             if index == 1{
              self.sortedArray = self.validityArray.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedDescending }
              print("segmnent 1 \(self.sortedArray)")
             }
          if index == 2{
                       self.sortedArray = self.validityArray.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedSame }
                       print("segmnent 1 \(self.sortedArray)")
                       self.tableView.reloadData()
          }
          if index == 3{
                       self.sortedArray = self.validityArray.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
                       print("segmnent 1 \(self.sortedArray)")
                       self.tableView.reloadData()
          }
         }
         self.view.addSubview(segmentedControl!)
     }


  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
      return sortedArray.count
  }

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

      let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! PlansTableViewCell
              cell.layoutIfNeeded()
              cell.containerView.dropShadow()
      cell.talktimeLabel.text = talktimeArray[indexPath.row]
      cell.validityLabel.text = sortedArray[indexPath.row] as? String
      return cell
  }
  } 

1 Ответ

2 голосов
/ 02 февраля 2020

Прежде всего, почему sortedArray объявлен как [Any]? Тип явно

var sortedArray = [String]()

В табличном представлении при запуске ничего не отображается, поскольку sortedArray не заполнено.

Либо вставьте

self.sortedArray = self.validityArray.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
tableView.reloadData()

в конце viewDidLoad, либо вставьте строку, которая заставляет вызывать обработчик indexChangeBlock.

...