UIKit 中的工作表

问题描述 投票:0回答:1

我是 UIKit 新手。使用界面生成器(可能)而不是 SwiftUI 使工作表可见的正确方法是什么。我的实际目标是拥有一张带有定制棘爪的床单。我尝试创建一个新的故事板文件和一个

UIViewController
,并且我已在身份检查器中设置了类名称。我还尝试将我的
UIViewController
添加到主故事板中。这就是点击主视图中的按钮时打开工作表的方式:

@IBAction func click(_ sender: UIButton) {
    let myViewController: MyViewController = .init()
    myViewController.loadViewIfNeeded()
    present(myViewController, animated: true)
}

这是我的视图控制器:

import Foundation
import UIKit

class MyViewController: UIViewController, UIViewControllerTransitioningDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
//        view.backgroundColor = .systemBackground
        modalPresentationStyle = .custom
        transitioningDelegate = self
    }
    
    func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
        let controller: UISheetPresentationController = .init(presentedViewController: presented, presenting: presenting)
        
        let detent: UISheetPresentationController.Detent = .custom(resolver: { context in 100 })
        
        controller.detents = [detent, .medium()]
        controller.prefersGrabberVisible = true
        
        return controller
    }
}

界面生成器中工作表顶部有一个按钮,但在工作表中不可见。事实上,整个sheet都是透明的,改变IB中的颜色没有任何效果。主视图变暗,我可以看到抓取器,并且棘爪已就位。

以编程方式更改背景颜色确实有效。我是否必须将故事板和视图控制器链接到其他地方才能显示我的视图,或者我缺少什么?

swift uikit interface-builder
1个回答
0
投票

这与床单或缓和或其他任何东西无关:你只是不明白什么是故事板。这条线

let myViewController: MyViewController = .init()

意味着您没有使用故事板。因此,您在情节提要中所做的任何操作都不可能对该视图控制器的外观产生任何影响。这就是为什么更改视图控制器视图的背景颜色可以在代码中起作用,但不能在故事板中起作用;视图控制器及其视图完全在代码中创建,因此它们必须完全在代码中配置。

完全没问题;许多人更喜欢在没有故事板的情况下工作,而故事板并不能为您做太多事情,如果有的话,您不能以编程方式做。所以如果你愿意,就坚持下去吧。

如果您确实想要从故事板中获取视图控制器,请为故事板中的视图控制器提供一个标识符,获取对故事板的引用,并告诉故事板通过标识符实例化视图控制器。或者,在故事板中从主视图控制器到呈现的视图控制器进行演示,然后触发 Segue。

© www.soinside.com 2019 - 2024. All rights reserved.