Swift2 如何以编程方式创建多个NSTextField?

Swift2 如何以编程方式创建多个NSTextField?,swift2,nsview,nstextfield,addsubview,cgpoint,Swift2,Nsview,Nstextfield,Addsubview,Cgpoint,我有一个CGPoints数组。我需要为数组中的每四个点创建一个个人标签,所以我需要以编程方式创建几个NSTextFields。我可以通过鼠标点击添加点,并可以创建任意多的点。这些点的标签必须全部处于活动状态,才能同时向用户显示文本。我怎么做 (macOS,Xcode 7,Swift 2) 这是我的密码: import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { @IBOutl

我有一个CGPoints数组。我需要为数组中的每四个点创建一个个人标签,所以我需要以编程方式创建几个NSTextFields。我可以通过鼠标点击添加点,并可以创建任意多的点。这些点的标签必须全部处于活动状态,才能同时向用户显示文本。我怎么做

(macOS,Xcode 7,Swift 2)

这是我的密码:

import Cocoa
@NSApplicationMain

class AppDelegate: NSObject, NSApplicationDelegate {
    @IBOutlet weak var window: NSWindow!
    @IBOutlet weak var drawView: DrawView!
    @IBOutlet weak var view: NSView!
    let label = NSTextField(frame: NSMakeRect(0,0,100,50))
    var pointsArray: [CGPoint] = []

    func applicationWillUpdate(aNotification: NSNotification) {
        label.backgroundColor = NSColor.clearColor()
        label.bezeled = false
        label.stringValue = "\(pointsArray.count/4)"


        var multiple = (1...25).map { _ in label }


        for index in 0..<(pointsArray.count/4) {

            let point = CGPoint(x: pointsArray[index*4].x, y: pointsArray[index*4].y)
            label.frame = CGRect(origin: point, size: CGSize(width: label.bounds.width, height: label.bounds.height))

            let sticker = multiple[index]
            view.addSubview(sticker)
        }
    }
}
导入可可粉
@非应用程序主
类AppDelegate:NSObject,NSApplicationDelegate{
@IBVAR窗口:NSWindow!
@ibvar-drawView:drawView!
@ibvar视图:NSView!
let label=NSTextField(帧:NSMakeRect(0,0100,50))
变量点数组:[CGPoint]=[]
func应用程序将更新(通知:NSNotification){
label.backgroundColor=NSColor.clearColor()
label.bezeled=false
label.stringValue=“\(pointsArray.count/4)”
var multiple=(1…25).map{inlabel}
对于0中的索引。。
我只看到一个标签

现在,我已经理顺了你的大括号和缩进,很容易看出原因。你的循环构造不正确,因此你创建了一个标签,并将其框架更改了四次。你需要用四个单独的框架创建四个单独的标签

我只看到一个标签


现在我已经理顺了大括号和缩进,很容易看出原因。循环构造不正确,因此创建一个标签并更改其框架四次。您需要创建四个带有四个单独框架的单独标签。

创建多个NSTextFields的代码:

import Cocoa
@NSApplicationMain

class AppDelegate: NSObject, NSApplicationDelegate {
    @IBOutlet weak var window: NSWindow!
    @IBOutlet weak var drawView: DrawView!
    var view = NSView(frame: NSMakeRect(0,0,1920,1080))
    var pointsArray: [CGPoint] = []

    var label1 = NSTextField(frame: NSMakeRect(0,0,100,50))
    var label2 = NSTextField(frame: NSMakeRect(0,0,100,50))
    var label3 = NSTextField(frame: NSMakeRect(0,0,100,50))
    .............
    .............
    var label25 = NSTextField(frame: NSMakeRect(0,0,100,50))

    func applicationWillUpdate(aNotification: NSNotification) {

        var labelArray = [label1, label2, label3, ..... label25]

        for i in 0..<(pointsArray.count/4) {

            labelArray[i].backgroundColor = NSColor.clearColor()
            labelArray[i].bezeled = false
            labelArray[i].stringValue = "\(i+1)"

            let point = CGPoint(x:(pointsArray[i * 4].x), y:(pointsArray[i * 4].y))

            var originPoint: [CGPoint] = []
            originPoint.append(point)

            labelArray[i].frame = CGRect(origin: originPoint[0], 
                size: CGSize(width: labelArray[i].bounds.width, height: labelArray[i].bounds.height))

            view.addSubview(labelArray[i])
        }
    }
导入可可粉
@非应用程序主
类AppDelegate:NSObject,NSApplicationDelegate{
@IBVAR窗口:NSWindow!
@ibvar-drawView:drawView!
var view=NSView(帧:NSMakeRect(0,019201080))
变量点数组:[CGPoint]=[]
var label1=NSTextField(帧:NSMakeRect(0,0100,50))
var label2=NSTextField(帧:NSMakeRect(0,0100,50))
var label3=NSTextField(帧:NSMakeRect(0,0100,50))
.............
.............
var label25=NSTextField(帧:NSMakeRect(0,0100,50))
func应用程序将更新(通知:NSNotification){
var labelArray=[label1,label2,label3,…label25]

对于0中的i..用于创建多个NSTEXT字段的代码:

import Cocoa
@NSApplicationMain

class AppDelegate: NSObject, NSApplicationDelegate {
    @IBOutlet weak var window: NSWindow!
    @IBOutlet weak var drawView: DrawView!
    var view = NSView(frame: NSMakeRect(0,0,1920,1080))
    var pointsArray: [CGPoint] = []

    var label1 = NSTextField(frame: NSMakeRect(0,0,100,50))
    var label2 = NSTextField(frame: NSMakeRect(0,0,100,50))
    var label3 = NSTextField(frame: NSMakeRect(0,0,100,50))
    .............
    .............
    var label25 = NSTextField(frame: NSMakeRect(0,0,100,50))

    func applicationWillUpdate(aNotification: NSNotification) {

        var labelArray = [label1, label2, label3, ..... label25]

        for i in 0..<(pointsArray.count/4) {

            labelArray[i].backgroundColor = NSColor.clearColor()
            labelArray[i].bezeled = false
            labelArray[i].stringValue = "\(i+1)"

            let point = CGPoint(x:(pointsArray[i * 4].x), y:(pointsArray[i * 4].y))

            var originPoint: [CGPoint] = []
            originPoint.append(point)

            labelArray[i].frame = CGRect(origin: originPoint[0], 
                size: CGSize(width: labelArray[i].bounds.width, height: labelArray[i].bounds.height))

            view.addSubview(labelArray[i])
        }
    }
导入可可粉
@非应用程序主
类AppDelegate:NSObject,NSApplicationDelegate{
@IBVAR窗口:NSWindow!
@ibvar-drawView:drawView!
var view=NSView(帧:NSMakeRect(0,019201080))
变量点数组:[CGPoint]=[]
var label1=NSTextField(帧:NSMakeRect(0,0100,50))
var label2=NSTextField(帧:NSMakeRect(0,0100,50))
var label3=NSTextField(帧:NSMakeRect(0,0100,50))
.............
.............
var label25=NSTextField(帧:NSMakeRect(0,0100,50))
func应用程序将更新(通知:NSNotification){
var labelArray=[label1,label2,label3,…label25]

对于0中的我,想一想你会如何告诉一个孩子去做。做一个标签,把它放在界面上,给它一个框架。再次循环:再做一个标签,把它放在界面上,给它一个框架-一个不同的框架。再次循环…你看到了吗?一个循环需要包含所有的东西。然后,一开始不要使用循环。只是通过做一个循环来练习文本字段并将其放在接口中。然后制作一个文本字段并将其放在接口中,然后制作另一个测试字段并将其放在接口中。换句话说,只需制作两个文本字段并将它们都放在接口中的不同位置。如果你能学会这样做,很明显如何将其重新表示为循环,因为你可以看到什么是共同点,什么是不同点。Thanx Matt,我做的。想想你会如何告诉孩子去做。做一个标签,把它放在界面上,给它一个框架。再次循环:再做一个标签,把它放在界面上,给它一个框架-一个不同的框架。再次循环…你看到了吗?一个循环需要包含所有的东西。然后首先不要使用循环。只需通过制作一个文本字段并将其放入界面来进行练习。然后制作一个文本字段并将其放入界面,然后制作另一个测试字段并将其放入界面。换句话说,只需制作两个文本字段并将它们都放入界面的不同位置。如果你能学会这样做,它将我很清楚如何将其重新表示为一个循环,因为你可以看到它们的共同点和不同点。Thanx Matt,我做到了。