Я следую этому уроку онлайн:
https://medium.com/@jannism/segmented-control-tutorial-for-beginner-in-swift-4-8588a63b8bfd
Он использует Сегментированный элемент управления для переключения UIView (представления контейнера) на основе выбора индекса в Сегментированном элементе управления.
Переключение контейнеров работает, как описано в руководстве, но ключевой части, где я хочу добавить либо текстовые поля, либо UIPicker в контейнер. Элементы отображаются в окне контейнера, но я НЕ могу с ними взаимодействовать !?
Кто-нибудь знает, как я могу заставить это работать?
Контроллер основного вида, который содержит три UIViews (иначе контейнеры)
class ViewController: UIViewController, TwicketSegmentedControlDelegate {
// OUTLETS AND VARIABLES
@IBOutlet weak var showHome: UIView!
@IBOutlet weak var showProfile: UIView!
@IBOutlet weak var showSettings: UIView!
// BACKGROUND OF THE TOP SLIDER
var segmentControlView: UIView = {
var uiView = UIView()
uiView.backgroundColor = UIColor.white
return uiView
}()
// DISPLAY SLIDER
var contentView:UIView = {
var uiView = UIView()
return uiView
}()
// DESIGN OF THE SEGMENT
var twicketSegmentControl:TwicketSegmentedControl = {
var twicketSegmentControl : TwicketSegmentedControl = TwicketSegmentedControl(frame:CGRect.zero)
// SETTING THE TITLES
let titles = ["Home", "Profile", "Settings"]
twicketSegmentControl.setSegmentItems(titles)
// SETTING THE TEXT COLOR OF THE CHOSEN SEGMENT TO WHITE
twicketSegmentControl.highlightTextColor = UIColor.white
// SETTING THE TEXT COLOR OF THE OTHER SEGMENTS TO A DARK GRAY
twicketSegmentControl.defaultTextColor = UIColor.init(red: 171/255.0, green: 183/255.0, blue: 183/255.0, alpha: 1.0)
// SETTING THE BACKGROUND COLOR OF THE CHOSEN SEGMENT TO BLUE
twicketSegmentControl.sliderBackgroundColor = UIColor.init(red: 31/255.0, green: 58/255.0, blue: 147/255.0, alpha: 1.0)
// SETTING THE BACKGROUND COLOR OF THE OTHER SEGMENTS TO A VERY LIGHT GRAY
twicketSegmentControl.segmentsBackgroundColor = UIColor.init(red: 238/255.0, green: 238/255.0, blue: 238/255.0, alpha: 1.0)
// SHOWS SEGMENTS
return twicketSegmentControl
}()
override func viewDidLoad() {
super.viewDidLoad()
// LOADING THE HOME SWITCH AS THE DEFAULT VIEW
didSelect(0)
super.viewDidLoad()
configureViewHierarchy()
}
// VIEWS
func configureViewHierarchy(){
view.addSubview(segmentControlView)
segmentControlView.snp.makeConstraints { (make) in
make.top.left.right.equalTo(view)
}
segmentControlView.addSubview(twicketSegmentControl)
twicketSegmentControl.delegate = self;
twicketSegmentControl.snp.makeConstraints { (make) in
// PUTS THE SEGMENT CONTROL 30px (= THE HEIGHT OF THE CONTROL) OVER THE VIEW
make.top.equalTo(showHome).offset(-30)
// DEFINE THE BORDERS TO THE SIDES
make.left.equalTo(segmentControlView).offset(16)
make.right.equalTo(segmentControlView).offset(-16)
make.bottom.equalTo(segmentControlView).offset(-10)
// DEFINE THE HEIGHT
make.height.equalTo(30)
}
view.addSubview(contentView)
contentView.snp.makeConstraints { (make) in
make.left.right.equalTo(view)
make.bottom.equalTo(view)
make.top.equalTo(segmentControlView.snp.bottom)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// CHOSING VIEW BASED ON SEGMENT CHOSEN
func didSelect(_ segmentIndex: Int) {
switch segmentIndex
{
case 0:
// SHOWING THE HOME VIEW
showProfile.alpha = 0
showSettings.alpha = 0
showHome.alpha = 1
case 1:
// SHOWING THE PROFILE VIEW
showHome.alpha = 0
showSettings.alpha = 0
showProfile.alpha = 1
case 2:
// SHOWING THE SETTINGS VIEW
showHome.alpha = 0
showProfile.alpha = 0
showSettings.alpha = 1
default:
break;
}
}
}
Настройки ViewController таковы:
class SettingViewController: UIViewController {
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
Как я уже сказал, у меня все очень просто, так что я могу отладить проблему, прежде чем включать более сложную.
Прилагается раскадровка