Подтвердить что ты не робот

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.
    }


}

Другое дело: если я помещу два представления внутри своего контроллера, что лучше всего отличить его?

Прошу совета. Спасибо.

4b9b3361

Ответ 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.