标签: uiviewcontrollerrepresentable

SwiftUI 游戏中心身份验证不提示用户登录

我有以下代码可以在我的 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

5
推荐指数
1
解决办法
355
查看次数

如何在 UIKit ViewController 中使用 EnvironmentObject

我正在构建一个 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)

uikit ios swiftui uiviewcontrollerrepresentable

5
推荐指数
1
解决办法
2348
查看次数

MFMessageComposeViewController + SwiftUI 错误行为

我使用 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

4
推荐指数
1
解决办法
1459
查看次数

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)

uikit ios swiftui uiviewcontrollerrepresentable

4
推荐指数
1
解决办法
5896
查看次数

SwiftUI 大标题导航栏与 UIViewControllerRepresentable UITableViewController 的兼容性

为了在 SwiftUI 列表中实现向右滑动,我试图使 UIViewControllerRepresentable UITableViewController 。
但当displayMode为.large时,与导航栏不兼容。

我想,当卷轴移动时,它应该

  1. 调整导航栏的大小。
  2. 调整滚动视图或列表的框架。

#2 不适用于我的表视图,因此需要做一些事情。我需要你的帮助。

[图片]

在此输入图像描述

  1. 第一次渲染效果很好。
  2. 滚动后,表格视图上方有多余的空间
  3. 通过点击显示屏顶部滚动到顶部后,位置被破坏。
  4. 滚动后查看层次结构(首次渲染后修复)

[代码] 重现(从 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

3
推荐指数
1
解决办法
1242
查看次数

当我的基于 SwiftUI 的应用程序以横向模式启动时,导航栏上的背景颜色未设置

我正在使用一个基于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

2
推荐指数
1
解决办法
2337
查看次数

具有 UIViewcontrollerRepresentable 的自定义 UIViewController,其 UITextView 在 SwiftUI 中调用时崩溃或为零

我已经做了一个自定义的UIViewController调用ViewControllerA并希望能够使用它,所以我做了一个UIViewControllerRepresentable调用, ViewControllerARepresentable如下所示,但问题是,当我ViewControllerARepresentable在 SwiftUI 视图中调用并传递一个值时stringToUpdateTextViewViewControllerAhtmlTextView(UITextView)inViewControllerAnil,我是不知道为什么。

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)

nsattributedstring swiftui uiviewcontrollerrepresentable

0
推荐指数
1
解决办法
1892
查看次数