我有以下代码可以在我的 SwiftUI 应用程序中对 Game Center 中的本地玩家进行身份验证。如果玩家尚未登录,我希望 Game Center 提示用户登录,但这不会发生。
class AppSettings: UINavigationController {
func authenticateUser() {
let localPlayer = GKLocalPlayer.local
localPlayer.authenticateHandler = { vc, error in
guard error == nil else {
print(error?.localizedDescription ?? "")
return
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
可能是什么问题呢?我还阅读了关于在我班级的某处使用 UIViewControllerRepresentable 将 UIKit 的 ViewController 集成到 SwiftUI 中的内容,但我不明白如何使用它。有人可以帮我吗?
gamekit game-center swift swiftui uiviewcontrollerrepresentable
我正在构建一个 SwiftUI 应用程序,ViewController通过UIViewControllerRepresentable. 目标是在我的 SwiftUI 应用程序中显示 a UITextView。这个的实现很简单,如下所示:
// iOSTextView.swift
import SwiftUI
struct iOSTextView: UIViewControllerRepresentable {
@Binding var document: Document
@EnvironmentObject var userData: UserData
func makeUIViewController(context: Context) -> some UIViewController {
let view = iOSTextViewController()
return view
}
func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
}
}
Run Code Online (Sandbox Code Playgroud)
注意EnvironmentObject命名的UserData. 它是一个包含一些通用数据的类,这些数据应该与我的应用程序中的每个视图共享,包括 UITextView ViewController。
// UserData.swift
import Foundation
final class UserData: ObservableObject {
@Published var someValue = 1
}
Run Code Online (Sandbox Code Playgroud)
下面是我的iOSTextViewController视图控制器:
// iOSTextViewController.swift …Run Code Online (Sandbox Code Playgroud) 我使用 ViewControllerRepresentable 来呈现 MFMessageComposeViewController,以便用户可以从我的应用程序发送文本。
然而,每次呈现视图时,它都非常有问题 - 元素随机消失,滚动关闭,并且屏幕闪烁。在 iOS 14.2 和 14.3 上测试。
这是代码:
import SwiftUI
import MessageUI
struct MessageView: UIViewControllerRepresentable {
var recipient: String
class Coordinator: NSObject, MFMessageComposeViewControllerDelegate {
var completion: () -> Void
init(completion: @escaping ()->Void) {
self.completion = completion
}
// delegate method
func messageComposeViewController(_ controller: MFMessageComposeViewController,
didFinishWith result: MessageComposeResult) {
controller.dismiss(animated: true, completion: nil)
completion()
}
}
func makeCoordinator() -> Coordinator {
return Coordinator() {} // not using completion handler
}
func makeUIViewController(context: Context) -> MFMessageComposeViewController { …Run Code Online (Sandbox Code Playgroud) mfmessagecomposeviewcontroller mfmailcomposeviewcontroller swiftui uiviewrepresentable uiviewcontrollerrepresentable
UIViewController我正在尝试在 SwiftUI 视图中使用自定义。我设置了一个在方法中UIViewControllerRepresentable创建的类。这将创建并显示按钮,但是,不占用任何空间。UIViewControllermakeUIViewControllerUIViewControllerUIViewControllerRepresentable
我尝试使用 aUIImagePickerController而不是我的自定义控制器,并且尺寸正确。我让控制器占用空间的唯一方法是在UIViewControllerRepresentableSwiftUI 视图中设置固定框架,但我绝对不想这样做。
注意:我确实需要使用 a,UIViewController因为我正在尝试UIMenuController在 SwiftUI 中实现 a。除了我遇到的尺寸不正确的问题之外,所有这些都可以工作。
struct ViewControllerRepresentable: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> MenuViewController {
let controller = MenuViewController()
return controller
}
func updateUIViewController(_ uiViewController: MenuViewController, context: Context) {
}
}
class MenuViewController: UIViewController {
override func viewDidLoad() {
let button = UIButton()
button.setTitle("Test button", for: .normal)
button.setTitleColor(.red, for: .normal)
self.view.addSubview(button)
button.translatesAutoresizingMaskIntoConstraints = false
button.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true …Run Code Online (Sandbox Code Playgroud) 为了在 SwiftUI 列表中实现向右滑动,我试图使 UIViewControllerRepresentable UITableViewController 。
但当displayMode为.large时,与导航栏不兼容。
我想,当卷轴移动时,它应该
#2 不适用于我的表视图,因此需要做一些事情。我需要你的帮助。
[图片]
[代码] 重现(从 xcode 创建 swiftui 项目后,将 ContentView.swift 的内容替换为以下代码。)
import SwiftUI
final class TableViewWrapper: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> UITableViewController {
let viewController = UITableViewController()
viewController.tableView.delegate = context.coordinator
viewController.tableView.dataSource = context.coordinator
return viewController
}
func updateUIViewController(_ uiViewController: UITableViewController, context: Context) {
uiViewController.tableView.reloadData()
}
func makeCoordinator() -> Coordinator {
Coordinator()
}
class Coordinator: NSObject, UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) …Run Code Online (Sandbox Code Playgroud) uitableview navigationbar ios swiftui uiviewcontrollerrepresentable
我正在使用一个基于SwiftUI的应用程序,该应用程序依赖于NavigationView从屏幕进行转换。
我需要在导航栏上设置背景颜色,并找到了大部分时间都可以实现此功能的代码。
当应用程序以纵向模式启动时,所有旋转都可以正常工作。
但是,当应用程序以横向模式启动时,该栏为默认灰色,并且仅在第一次旋转后更新。
下面,我用最少的代码来重现我的问题:
import SwiftUI
struct ContentView: View {
var body: some View {
return NavigationView {
List {
NavigationLink(destination: Text("A")) {
Text("See A")
}
}
.background(NavigationConfigurator { navigationConfigurator in
navigationConfigurator.navigationBar.barTintColor = .orange
})
.navigationBarTitle(Text(verbatim: "Home"), displayMode: .inline)
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
struct NavigationConfigurator: UIViewControllerRepresentable {
var configure: (UINavigationController) -> Void = { _ in }
func makeUIViewController(context: UIViewControllerRepresentableContext<NavigationConfigurator>) -> UIViewController {
UIViewController()
}
func updateUIViewController(_ uiViewController: UIViewController,
context: UIViewControllerRepresentableContext<NavigationConfigurator>) {
if let navigationController …Run Code Online (Sandbox Code Playgroud) ios ios13 swiftui ios-navigationview uiviewcontrollerrepresentable
我已经做了一个自定义的UIViewController调用ViewControllerA并希望能够使用它,所以我做了一个UIViewControllerRepresentable调用, ViewControllerARepresentable如下所示,但问题是,当我ViewControllerARepresentable在 SwiftUI 视图中调用并传递一个值时stringToUpdateTextView,ViewControllerA该htmlTextView(UITextView)inViewControllerA是nil,我是不知道为什么。
ViewControllerARepresentable(stringToUpdateTextView: "<html>Send some Html Text as string here</html>")
Run Code Online (Sandbox Code Playgroud)
ViewControllerA可表示
public struct ViewControllerARepresentable: UIViewControllerRepresentable {
var stringToUpdateTextView: String
public func makeUIViewController(context: Context) -> ViewControllerA {
let viewcontrollerA = ViewControllerA(testString: testingString)
return viewcontrollerA
}
public func updateUIViewController(_ uiViewController: ViewControllerA, context: Context) {}
}
Run Code Online (Sandbox Code Playgroud)
视图控制器A
open class ViewControllerA: UIViewController {
public var stringToUpdateTextView: String
override open func viewDidLoad() {
super.viewDidLoad() …Run Code Online (Sandbox Code Playgroud) swiftui ×7
uiviewcontrollerrepresentable ×7
ios ×4
uikit ×2
game-center ×1
gamekit ×1
ios13 ×1
mfmailcomposeviewcontroller ×1
mfmessagecomposeviewcontroller ×1
swift ×1
uitableview ×1