ios - 如何在 Swift 的单独类中使用函数时添加 View ?

标签 ios swift viewcontroller

我创建了一个新的 Swift-file,其中包含一个函数,该函数应该添加一些 UILabelsUITextFields 和一个 UIButtonviewcontroller。 当此代码在 ViewController 中时它可以工作,但在单独的文件中我收到一些错误消息:

class InitialiseLabels {
    func setupLabels() {

        // multiple variables are declared without problems, but then:
        let viewWidth = view.frame.width // Use of unresolved identifier 'view'
        let viewHeight = view.frame.height // Use of unresolved identifier 'view'
        view.addSubview(myLabel) // Use of unresolved identifier 'view'

        // etcetera

        myTextField.delegate = self as" UITextFieldDelegate // Use of unresolved identifier 'self'
        view.addSubview(myTextField) // Use of unresolved identifier 'view'
    }
}

我想我应该在 View 前面添加一些东西来指定它应该去哪里(比如 self.view 但那个显然不起作用,这个 ViewController 也不起作用)。有人可以帮帮我吗?

最佳答案

您的问题“如何在 Swift 的单独类中使用函数时添加 View ?”的简短回答是“不要那样做”。

您应该将 View Controller 的 View 视为私有(private)的。 View Controller 应对它们负责。

如果您真的想让外部对象向您的 View Controller 添加 View (同样,您不应该这样做),您需要引用另一个 View Controller 。创建一个将新 View 作为参数并为调用者添加它们的函数会更清晰:

public func addViewdToContent(_ views: [UIView]) 

然后从另一个对象,你需要一个对该 View Controller 的引用:

let otherViewConroller = //code to somehow get the other view controller. 

let contentView = otherViewConroller.view
let viewWidth = contentView.frame.width
let viewHeight = view.frame.height
otherViewConroller.addViewToContent([myLabel]

您的下一行没有任何意义,您收到的错误也没有意义。让其他对象成为 View Controller View 的委托(delegate)是一个非常糟糕的主意。将需要委托(delegate)的文本字段之类的 View 注入(inject)到另一个 View Controller 中也是一个坏主意。

myTextField.delegate = self as" UITextFieldDelegate // makes no sense

关于ios - 如何在 Swift 的单独类中使用函数时添加 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52536674/

相关文章:

ios - 从 TabBarController 的导航 Controller 隐藏 BarButton 项目

ios - UIButton 超出导航栏

swift - Swift 3 中与 Cocoa 的线程间对象通信

ios - 在 iOS 8 和 iOS 9 中调试移动 Safari

ios - 获取 HTTP 加载失败(错误代码 : -1004 [1:61]) on iPhone 7 plus

ios - for循环Swift iOS的退出迭代

ios - 将数据与 segue 一起传递

swift - 只有 factor 方法可以有 swift_name 属性 Mapbox

ios - 删除类丢弃错误消息未知> :0: error: no such file or directory:

swift - 暂停和恢复 SpriteKit 游戏