gpt4 book ai didi

ios - Swift:自定义 UIAlertController View

转载 作者:搜寻专家 更新时间:2023-11-01 05:55:11 31 4
gpt4 key购买 nike

docs说子类化 UIAlertController 不好

The UIAlertController class is intended to be used as-is and does not support subclassing. The view hierarchy for this class is private and must not be modified.

那么推荐的警报方式是什么,它不仅显示标题、消息和一些按钮,而且还显示进度条、列表等其他内容?

在我的特殊情况下,我想要两种不同的警报,一种显示 ProgressBar,另一种显示错误消息列表。

目前我正在尝试手动添加 ProgressView 并设置约束:

func getProgressAlert(onAbort: @escaping () -> ()) -> UIAlertController {
let alert = UIAlertController(title: "Test", message: "Test", preferredStyle: .alert)

let abort = UIAlertAction (title: "Abort", style: UIAlertActionStyle.cancel) { _ in
onAbort()
}
alert.addAction(abort)

let margin:CGFloat = 8.0
let rect = CGRect(x:margin, y:72.0, width: alert.view.frame.width - margin * 2.0 , height:2.0)
self.progressView = UIProgressView(frame: rect)
self.progressView!.setProgress(0.0, animated: false)
self.progressView!.tintColor = UIColor.blue
alert.view.addSubview(self.progressView!)
self.progressView!.translatesAutoresizingMaskIntoConstraints = false
self.progressView!.widthAnchor.constraint(equalTo: alert.view.widthAnchor, multiplier: 1.0).isActive = true
self.progressView!.heightAnchor.constraint(equalToConstant: 5.0).isActive = true
self.progressView!.topAnchor.constraint(equalTo: alert.view.topAnchor).isActive = true
self.progressView!.leftAnchor.constraint(equalTo: alert.view.leftAnchor).isActive = true

return alert
}

我认为不应该这样做,因为手动定义约束在不同设备上很容易出错。例如,当前代码只在警报 View 的顶部显示进度条,但我希望它显示在消息和中止按钮之间。

最佳答案

The view hierarchy for this class is private and must not be modified.

这几乎是这个 API 的致命伤。如果你尝试破解它,你会在尝试跨不同的 iOS 版本支持它时给自己带来很多痛苦。

如果想要对警报进行自定义控制,您必须编写自定义 UIViewController 子类并尽可能模仿 API,同时添加新功能(如果您不想这样做对此,GitHub 上将提供示例)。

一些例子:

关于ios - Swift:自定义 UIAlertController View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49697318/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com