Swift:文本标签未更新

标签 swift macos label appdelegate

我有一个文本标签(NSTextField)。我希望它固定到每个对象的左上角,以在 UI 中显示元素的编号。 但我的标签只显示零并且没有移动(它停留在左上角)。我做错了什么?

这是我在 AppDelegate.swift 中的代码:

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {


@IBOutlet weak var window: NSWindow!
@IBOutlet weak var drawingView: DrawingView!
@IBOutlet weak var label: NSTextField!


var localArray: [CGPoint] = []

func applicationDidFinishLaunching(aNotification: NSNotification) {

    label.textColor = NSColor(calibratedRed: 0.15, green: 0, blue: 0.75, alpha: 0.3)
    label.font! = NSFont(name: "Arial Bold", size: 60)!
    label.backgroundColor = NSColor.clearColor()
    label.stringValue = "\(localArray.count/4)"

    for (pointIndex, _) in localArray.enumerate() {

        let point = CGPoint(x: (localArray[(pointIndex/4)+1].x), y: (localArray[(pointIndex/4)+1].y))

        label.sizeToFit()
        label.frame = CGRect(origin: point, size: CGSize(width: label.bounds.width, height: label.bounds.height))
    }
}

这是我在 DrawingView.swift 中的代码:

   var delegate = NSApplication.sharedApplication().delegate as! AppDelegate
   delegate.localArray = myArray.map { return $0.coordSequence()[0] }

myArray 包含 cgpoints。

我将标签参数放入 applicationDidFinishLaunching 方法中是否正确?

最佳答案

您可能正在尝试从错误的线程更新 NSTextField。

dispatch_async(dispatch_get_main_queue(),{
     label.stringValue = "\((localArray.count/4)+1)"
})

尝试调查您的数组,我可以假设当您设置标签 localArray.count 的值时为 0。另请记住,您正在使用 Int 并且如果 localArray.count 是 3,那么 3/4 将是 0。

关于Swift:文本标签未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39328946/

相关文章:

ios - 在运行时定义类型别名

swift - 从 UIDatepicker 获取日期组件

objective-c - 在 NSTableView 中除所选行之外的所有行中放置渐变

linux - 如何将 Qt 应用程序从一个操作系统(linux)交叉编译到其他操作系统(Windows 和 MAC)?

linux - Cocoa = 如何在不启动 C 终端的情况下在后台运行脚本

r - 在ggplot2中设置base_size时重叠轴标签

image - Magento:如何通过标签获取图像?

swift - iOS 应用程序框架崩溃

ios - 为什么使用照片框架的示例应用程序在每次更改后都使用 stopCachingImagesForAllAssets?

jsf - h:outputLabel及其 “for”属性的用途