【发布时间】:2021-05-02 19:45:34
【问题描述】:
我使用uihostingcontroller 在 UIKit 视图中加载 SwiftUI 视图。
在我的 SwiftUI 视图中,我创建了一些水平滚动视图,其中包含一些内容。
我需要能够点击/点按这些元素并转到我的 UIKit 中的另一个视图。
这可能吗?
我发现了这个,但这表明将 UIKit “重新加载”到 SwiftUI 视图中,这不是我想要做的,而且我认为这不是正确的做法:
Is there any way to change view from swiftUI to UIKit?
这是我的 SwiftUI 代码:
import SwiftUI
struct videosContentView: View {
var body: some View {
ScrollView{
ForEach(0..<2) {_ in
Section(header: Text("Important tasks")) {
VStack{
ScrollView(.horizontal){
HStack(spacing: 20) {
ForEach(0..<10) {
Text("Item \($0)")
.font(.headline)
.frame(width: 160, height: 200)
.background(Color.gray)
/*.padding()*/
.addBorder(Color.white, width: 1, cornerRadius: 10)
/*.overlay(
RoundedRectangle(cornerRadius: 16)
.stroke(Color.blue, lineWidth: 4)
)*/
}
}
}
}
}
}
}
}
}
struct videosContentView_Previews: PreviewProvider {
static var previews: some View {
videosContentView()
}
}
extension View {
public func addBorder<S>(_ content: S, width: CGFloat = 1, cornerRadius: CGFloat) -> some View where S : ShapeStyle {
let roundedRect = RoundedRectangle(cornerRadius: cornerRadius)
return clipShape(roundedRect)
.overlay(roundedRect.strokeBorder(content, lineWidth: width))
}
}
编辑:
根据 cmets 中的建议,我尝试了这个,但这不起作用:
按钮(动作:{
let secondViewController = self.storyboard.instantiateViewControllerWithIdentifier("home") as home
self.navigationController.pushViewController(secondViewController, animated: true)
}) {
Text("Dismiss me")
.font(.headline)
.frame(width: 160, height: 200)
.background(Color.gray)
.addBorder(Color.white, width: 1, cornerRadius: 10)
}
【问题讨论】:
-
你的另一个视图是 UIViewController 还是别的什么?
-
@RajaKishan,是的,它是另一个 UIViewController。
-
然后首先找到最顶层的控制器并推送你的视图控制器或者你可以使用完成块。
-
@RajaKishan,请查看我的编辑。如何从 SwiftUI 视图推送到另一个视图控制器?
-
添加断点并检查你的 self.navigationController 是否为空,如果为空,则首先将导航控制器嵌入到主机控制器。