在iOS中,如何使用故事板将标签连接到视图?

In iOS, how to connect a Label to a View using a storyboard?

我正在制作一个简单的 iOS 应用程序,我发现您可以使用故事板将标签连接到视图控制器,方法是按住控制按钮并将标签从标签拖动到视图控制器,创建一个 IBOutlet。我喜欢这样方便。

我想知道如何将 IBOutlet 制作成视图,而不是 视图控制器。我做了一个自定义视图并在上面放了一些标签。我希望在我的 view class 中引用这些标签,而不是 view controller。但是 XCode 似乎不允许我创建 IBOutlet,除非我拖到 视图控制器 。有解决办法吗?

我能想到的唯一其他选择是以编程方式在视图上创建标签,但我不想这样做。我试图将标签保留为视图的一部分,我认为视图控制器不需要了解它们。

关于可能的重复:我的问题是关于尝试将标签(或任何控件)连接到视图而不是使用故事板的视图控制器。链接的问题并不具体,看起来更像是新用户使用 xcode 寻求帮助。接受的答案对我的问题没有帮助。

首先你必须在故事板中获取父视图(查看你在哪里添加标签并声明这个视图是你在代码中的 class 的视图)。假设,您将创建继承自 UIView 的 class MyView,然后您将转到情节提要,单击情节提要中的父视图,您的标签所在的位置,然后在右侧部分选择 class 并在那里写下您的名称以前创建的 class (MyView) - 自动完成应该可以工作。然后在一侧打开情节提要,在右侧打开 MyView class,您可以拖放引用,与 ViewController

完全相同

我觉得这是一种解决方法,但如果您首先将插座添加到自定义视图 class,那么您可以通过从 Referencing Outlet 向后拖动 XCode 来附加插座到情节提要中的视图

class CustomView: UIView
{
    @IBOutlet weak var lblOne: UILabel!

    // do all the other stuff you need
}

你创建了包含一些对象(UILabel、UIButton、UIImage...)的 ViewControler

1 - 您需要 link 将故事板中的 ViewControler ViewController.swift 添加到 ViewController.swift,按照图片进行操作

2 - 在 class 字段中输入 ViewController class 的名称。这样你就可以 link 将你的故事板视图控制器编辑到你的 viewController.swift class

3 - 现在您需要创建要分配的变量(故事板中的 UILabel、UIButton ...):在本例中:

`class MovieDetailViewController: UIViewController, DetailView {

var presenter: MovieDetailPresenter!
var movie: Movie?

@IBOutlet weak var lblMovieYear: UILabel!
@IBOutlet weak var lblMovieTitle: UILabel!
@IBOutlet weak var movieImage: UIImageView!
@IBOutlet weak var lblMovieRating: UILabel!
@IBOutlet weak var lblMovieOverview: UILabel! 

}`

4 - 要 link 故事板中的 UILabel 到您的 UILabel 变量或故事板中的 UIButton 到您的 UIButton var,请按照下一张图片

首先select故事板中的视图控制器

第二个 select 右上角的 parragraf 图标,然后单击 'Assistant',它将打开您的 ViewControler.swift

屏幕

现在yopu只需要将变量拖到对应的对象上就大功告成

请记住,对于所有变量,您需要为情节提要中的每个对象创建一个变量。

标签与代码的连接示例。

按住 ctrl 并从标签拖动到 viewController class 内。 它要求您命名出口,例如。 heart_rate_UILabel

@IBOutlet weak var heart_rate_UILabel: UILabel!

使用名称以编程方式设置标签。
例如

heart_rate_UILabel.text = String( wearable_heart_rate )

例如,来自非主线程... 调度队列

.main.async
        {
            self.heart_rate_UILabel.text = String( self.wearable_heart_rate)
}