如何创建可以由多个UIVIewController共享/使用的UIView?

时间:2018-08-03 09:21:44

标签: ios objective-c uiview storyboard

我正在寻求以UIView的形式构建自定义错误消息。我想在我的应用中为每个UIView使用此UIViewController。显然,我不想为每个屏幕都重新创建它,因此我正在寻找“共享”它的最佳解决方案。

将其创建为UIViewController并以这种方式添加它会更好,还是有更好的方法?

4 个答案:

答案 0 :(得分:3)

UIView实例只能在一个地方使用。它们只能有一个superview,因此不能同时在多个视图层次结构中使用。

如果您更改视图的superview,则实际上将移动视图。

我认为有两种可能性:

  • 您要始终在屏幕上显示此错误消息。在这种情况下,您应该创建一个专用的UIViewController,并始终将其显示在屏幕上,
  • ,或者您要显示其他错误。这样,就可以为其中显示错误的每个控制器创建UIView实例。

答案 1 :(得分:1)

是的,请使用ViewController,它比简单的视图要好。您的消息中可能包含按钮之类的操作。

为避免过多的代码重复,您可以使用mixin:

long

并在每个希望显示错误的视图控制器中实现协议。

protocol ErrorDisplay {
    func display(_ error: Error)
}

extension ErrorDisplay where Self: UIViewController {
    func display(_ error: Error) {
        let viewController = ErrorViewController(error: error)
        // You could also add it as a child view controller rather than presenting it, 
        // if you want to add its view in the current hierarchy
        present(viewController, animated: true, completion: nil)
    }
}

答案 2 :(得分:1)

如果您希望当时始终在屏幕上显示的视图,可以使用窗口显示视图。

窗口是屏幕上显示的所有视图的根,窗口始终存在,因此一旦在窗口中添加了视图,该视图就会一直存在于屏幕中。

只需使用以下代码即可将视图添加到窗口

let window = UIApplication.shared.keyWindow!
let v = UIView(frame: CGRect(x: window.frame.origin.x, y: window.frame.origin.y, width: window.frame.width, height: window.frame.height))
window.addSubview(v);

答案 3 :(得分:0)

对于这个问题,我希望您创建一个 UIView 类,并且可以在viewController中重用它。为此,请按照以下步骤操作,

BroadcastReceiver