Swift - Сегментированный контроль - Переключение нескольких видов
До сих пор я все еще не могу понять, как переключить несколько видов в один контроллер представления. Моя раскадровка похожа на эту.
![enter image description here]()
В настоящий момент я хочу встроить два представления внутри моего контроллера представления.
![enter image description here]()
Мой код для сегментированного управления для переключения двух видов в один контроллер представления до сих пор.
import UIKit
class PopularHistoryViewController: UIViewController {
@IBOutlet weak var segmentedControl: UISegmentedControl!
@IBAction func indexChanged(sender: UISegmentedControl) {
switch segmentedControl.selectedSegmentIndex
{
case 0:
NSLog("Popular selected")
//show popular view
case 1:
NSLog("History selected")
//show history view
default:
break;
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
Другое дело: если я помещу два представления внутри своего контроллера, что лучше всего отличить его?
Прошу совета. Спасибо.
Ответы
Ответ 1
Вы можете использовать isHidden
свойство UIView
, чтобы показать/скрыть ваши требуемые виды.
Сначала вам нужно связать оба представления с IBOutlets
с помощью конструктора интерфейса
@IBOutlet weak var historyView: UIView!
@IBOutlet weak var popularView: UIView!
@IBAction func indexChanged(_ sender: UISegmentedControl) {
switch segmentedControl.selectedSegmentIndex {
case 0:
historyView.isHidden = true
popularView.isHidden = false
case 1:
historyView.isHidden = false
popularView.isHidden = true
default:
break;
}
}
Примечание: он был назван hidden
в Swift 1 и 2.
Ответ 2
Если вы хотите сделать макет пользовательского интерфейса в Xcode для двух перекрывающихся подзонов, лучшим решением будет использование двух UIContainerViewController и использовать тот же способ установки скрытого свойства, как предлагается в приведенном выше ответе.
![enter image description here]()
Ответ 3
Прежде всего создайте две розетки и соедините шланг с видами в ViewController
.
@IBOutlet weak var firstView: UIView!
@IBOutlet weak var secondView: UIView!
И измените код как:
@IBAction func indexChanged(sender: UISegmentedControl)
{
switch segmentedControl.selectedSegmentIndex
{
case 0:
firstView.hidden = false
secondView.hidden = true
case 1:
firstView.hidden = true
secondView.hidden = false
default:
break;
}
}
Если вы не хотите создавать Outlets, назначьте отдельные теги (Say 101
и 102
), и вы можете сделать это так:
@IBAction func indexChanged(sender: UISegmentedControl)
{
switch segmentedControl.selectedSegmentIndex
{
case 0:
self.view.viewWithTag(101)?.hidden = false
self.view.viewWithTag(102)?.hidden = true
case 1:
self.view.viewWithTag(101)?.hidden = true
self.view.viewWithTag(102)?.hidden = false
default:
break;
}
}
Ответ 4
Добавьте оба представления к контроллеру представления в доске объявлений и установите один из них для скрытия = да или альфа = 0. Когда ваш индекс изменяет функцию, вызывается, чтобы установить текущее представление на экране в hidden = yes/alpha из 0 и установите ранее скрытое представление в hidden = no/alpha = 1. Это должно достичь того, что вы хотите.
Ответ 5
@IBAction func acSegmentAction (_ отправитель: любой) {
switch acSegmentedControl.selectedSegmentIndex
{
case 0:
// print("addressview selected")
addressView.isHidden = false
contactProviderView.isHidden = true
case 1:
//print("contact provider selected")
addressView.isHidden = true
contactProviderView.isHidden = false
default:
break;
}
}
Ответ 6
Обновления XCODE 8.3.2
здесь приведен обновленный синтаксис для xcode 8.3.2
Контейнер Views работает так же, как и View Controllers.