Можно ли поддерживать два табличных представления и один контроллер представления в сегментированном контроллере?

У меня есть сомнения, как поддерживать два табличных представления и один контроллер представления в сегментированном контроллере. В segment=0 я хочу отобразить первое табличное представление, в segment=1 отобразить второе табличное представление и segment=2 отобразить один контроллер представления, возможно ли это?


person User558    schedule 21.01.2016    source источник
comment
да это возможно, используйте теги для каждой вещи, покажите   -  person Anbu.Karthik    schedule 21.01.2016
comment
Вместо двух таблиц используйте два источника данных для обоих сегментов, это сэкономит много работы и времени.   -  person iAnurag    schedule 21.01.2016


Ответы (4)


да. это возможно. Есть два способа.

  1. Используйте одно табличное представление. И на основе сегмента измените значения таблицы.
  2. Используйте два настраиваемых класса tableview и настраиваемые методы Protocal/delegate для управления событиями.
person RJV Kumar    schedule 21.01.2016

Вам действительно не нужно иметь 2 Tableviews. На основе выбора сегмента вызовите [tableview reloaddata] с вашими данными, что отображать в этом разделе сегмента. Это экономит много усилий и манипуляций.

person Bharath Vankireddy    schedule 21.01.2016

Я думаю, что scrollView может помочь вам решить вашу проблему:

Просто добавьте два tableViews в scrollView и используйте метод segmentedController, чтобы установить scrollView contentOffset.x

Точно так же вы можете добавить ViewController в scrollView после двух tableView и прокрутить его, щелкнув сегмент == 2

Надеюсь, что мой совет вам поможет :)

person TruthSeeker    schedule 21.01.2016

Независимо от того, используете ли вы одно или несколько табличных представлений, основная идея заключается в обработке события выбора.

Если ваш сегментированный элемент управления создан в раскадровке, вы можете использовать выход @IBAction, в качестве альтернативы вы можете использовать синтаксис addTarget.

e.g:

 mySegmentedControl.addTarget(self, #selector(myHandlerMethod(_:), for: .valueChanged)

где метод обработчика выглядит примерно так:

(первый случай)

@IBAction func myHandlerMethod(_ sender: UISegmentedControl) {

}

(второй случай)

@objc func myHandlerMethod(_ sender: UISegmentedControl) {
    if sender.selectedSegmentIndex == 1 {
        // handle your table view reloading or switching between first and second table views. 
    } else {
        // otherwise, do something else
    }
}

Некоторые дополнительные мысли:

  • Я бы согласился с другими в использовании одного табличного представления и предоставлении ему другого набора данных. Вы можете использовать разные подклассы UITableViewCell для представления ваших данных, если формат содержимого между вашими наборами данных отличается по структуре и значению.

  • Возможно, также стоит изучить использование контроллеров дочерних представлений вместо простых представлений/табличных представлений. Таким образом, вы можете инкапсулировать логику, относящуюся к каждой конкретной сцене, которую вы хотите представить внутри контроллера представления, и управлять ею независимо.

person Alexei    schedule 30.07.2019