我正在学习iOS,只有很少的示例项目。我有两个视图控制器,第一个VC有几个按钮和一个mapview,第二个VC有tableview显示一组结果。我已经在navigationViewController中嵌入了两个viewcontrollers。通过单击First VC中的按钮我能够显示tableview(使用show segue)并能够通过导航返回到第一个VC。现在我的查询是我要显示tableview(第二个VC)来代替firstVC中定义的一个视图对象(地图视图),而不是全屏填充tableview。我的问题是当显示另一个Viewcontroller时我仍然希望从firstVC看到一些viewobjects所以当我点击一个触发segue的按钮时,我试图在mapview上显示第二个VC。我必须使用单个界面,所以我需要通过用tableview替换mapView的视图,将来自SecondVC的tablview结果加载到firstVC中。如果可能的话,请让我知道您的想法,并且欢迎任何其他想法实现相同的想法。
答案 0 :(得分:0)
Sreekanth Gundlapalli,
您需要做的就是将TableView控制器的视图作为子视图添加到视图控制器中。为了简化过程,我个人更喜欢使用ContainerView,
步骤1:将ContainerView添加到View Controller并向其添加自动布局约束,因为您的tableView将被加载到您捐赠的容器视图中,必须将任何自动布局约束应用于tableView以使其保持原位: )
步骤2:将IBOutlet拖到容器view.lets,将其称为containerView:)
步骤3:现在由您决定是否有两个视图控制器1用于加载地图,1个用于加载tableView,或者您将地图视图作为视图控制器子视图,您将隐藏它或删除它并添加容器视图但我个人更喜欢干净整洁的代码所以我更喜欢有两个不同的VC
所以让我们创建2个VC,让我们将它们称为viewController1& viewController2 Savy ??
第4步: 让我们编写一个实际加载VC的方法,并将其视图作为子视图添加到ViewController
func changeEmbededVC(for status : Int) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
if status == 0 {
mehereButton.tag = 1
let vc = storyboard.instantiateViewController(withIdentifier: "viewController1")
vc.willMove(toParentViewController: self)
containerView.addSubview(vc.view)
self.addChildViewController(vc)
vc.didMove(toParentViewController: self)
}
else {
mehereButton.tag = 0
let vc = storyboard.instantiateViewController(withIdentifier: "viewController2")
vc.willMove(toParentViewController: self)
containerView.addSubview(vc.view)
self.addChildViewController(vc)
vc.didMove(toParentViewController: self)
}
}
我相信代码非常自我解释:D现在是什么mehereButton.tag = 1
?很简单你想在按钮上切换视图按下你不是:D因此我为mehereButton创建了一个IBOutlet并更改了它的标签:)
现在终于在mehereButton的IBAction中了
@IBAction func buttonTapped(_ sender: UIButton) {
self.changeEmbededVC(for: self.mehereButton.tag)
}
但我们需要加载其中一个视图默认情况下不是:D 所以将viewDidAppear更改为
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.changeEmbededVC(for: 0)
}
希望我已经回答了你的问题详细说明:PI知道你不能投票或接受答案,因为你没有足够的声誉:)但希望它将来也能帮助某人:)< / p>