Как загрузить второй массив в UITableView, когда я проведу влево, используя Swift 4.2 и iOS12? - PullRequest
0 голосов
/ 10 января 2019

Я только начал изучать программирование Swift.

Когда приложение открывается, я загружаю массив в UITableView. Однако, когда пользователь Swipes ушел, тот же UITableView должен загрузить второй массив, и он вправо Swipes, UITableView должен загрузить первый массив снова.

Я протестировал следующий код, он меняет цвета в соответствии со свайпами. Однако я не могу загрузить второй массив.

override func viewDidLoad() {
    super.viewDidLoad()

    let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(sender:)))
    view.addGestureRecognizer(rightSwipe)
}

@objc func handleSwipe(sender: UISwipeGestureRecognizer) {
    if sender.state == .ended {
        switch sender.direction {
        case .right:
            view.backgroundColor = .red
            print("Right swipe")
            let newCell = goNext(tblView, cellForRowAt: idxPath)
            print(newCell)
}

func goNext(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "chapterCell", for: idxPath)
    if currentChapter != totalChapters[0] {
        cell.textLabel?.numberOfLines = 0
        cell.textLabel?.text = genCh2[indexPath.row]
    }
    return cell
}

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Я думаю, что ваша путаница связана с тем, как UITableViewControllers работает в отношении отображения и обновления данных. В конечном счете, источник данных UITableView отвечает за предоставление правильных данных для отображения. Вы не хотите напрямую обновлять ячейку. Вместо этого вы просите перезагрузить представление таблицы, а затем убедитесь, что соответствующий метод источника данных предоставит нужные вам данные (в этом случае cellForRowAt - это метод, который нас больше всего интересует). У меня есть кое-что, что, по сути, делает то, что вы хотели, что, надеюсь, поможет вам начать в правильном направлении.

Это не 100%, как вы описали как пролистывание влево, как правило, используется табличным представлением, чтобы указать, что пользователь пытается удалить ячейку. Как пример написан ниже, левые пролистывания никогда не будут регистрироваться. Поэтому длительное использование жестов смахивания, как вы описываете, может быть не лучшим выбором.

class TableViewController: UITableViewController {

    let dataArray1 = ["1", "2", "3"]
    let dataArray2 = ["red", "blue", "green"]
    var activeArray = 1
    override func viewDidLoad() {
        super.viewDidLoad()

        let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(_:)))
        view.addGestureRecognizer(rightSwipe)

    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 3
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "reuseId", for: indexPath)

        cell.textLabel?.text = activeArray == 1 ? dataArray1[indexPath.row] : dataArray2[indexPath.row]

        return cell
    }

    @objc func handleSwipe(_ sender: UISwipeGestureRecognizer) {

        if sender.state == .ended {
            switch sender.direction {
            case .right:
                self.activeArray = 2
                self.tableView.reloadData()
            case .left:
                self.activeArray = 1
                self.tableView.reloadData()
            default:
                break
            }
        }
    }

}
0 голосов
/ 10 января 2019

Две вещи: вам нужен источник данных tableView, и жесты смахивания имеют направление и должны быть установлены.

class MyViewController : UIViewController , UITableViewDataSource{

    var tblView : UITableView!
    var genCh1 = ["first","second","later"]
    var genCh2 = ["data","data1","data2"]
    var currentData : [String]?

    //TableViewDataSource
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return currentData?.count ?? 0
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "chapterCell", for: indexPath)
        //if currentChapter != totalChapters[0] {
        cell.textLabel?.numberOfLines = 0
        cell.textLabel?.text = currentData?[indexPath.row]
          //          }
                    return cell
    }

    func reloadData(_ array : [String]){
         currentData = array
        tblView.reloadData()
    }






    override func viewDidAppear(_ animated: Bool) {

    // setup viewController
        super.viewDidAppear(animated)

        tblView = UITableView.init(frame: view.bounds)
        tblView.backgroundColor = .red
               view.addSubview(tblView)
        tblView.dataSource = self
        tblView.register(UITableViewCell.self, forCellReuseIdentifier: "chapterCell")
        reloadData(genCh1)


        //add gesture

        let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(sender:)))
        rightSwipe.direction = .right
        view.addGestureRecognizer(rightSwipe)
        let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(sender:)))
        leftSwipe.direction = .left
        view.addGestureRecognizer(leftSwipe)
    }



    @objc func handleSwipe(sender: UISwipeGestureRecognizer) {
        if sender.state == .ended {
            switch sender.direction {
            case .right:
                view.backgroundColor = .red
                print("Right swipe")
               reloadData(genCh1)
            case .left:
                view.backgroundColor = .blue
                print("Left swipe")
             reloadData(genCh2)
            default:
                break;
            }}}
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...