У меня есть массив CGPoints. Мне нужна персональная метка для каждой четвертой точки в массиве, поэтому мне нужно создать несколько NSTextFields программно. Я могу добавлять точки с помощью щелчков мыши и создавать как можно больше очков. Ярлыки для этих точек должны быть активными, чтобы одновременно показывать текст для пользователя. Как мне это сделать?Как программно создать несколько 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)
}
}
}
Во время выполнения я вижу только один ярлык, но мне нужно, чтобы увидеть несколько меток одновременно (каждый четвертый CGPoint). Если у меня есть 100 CGPoints, у меня должно быть 25 ярлыков.
Как я должен писать код? – andy
Подумайте, как бы вы сказали ребенку сделать это. Сделайте ярлык, поместите его в интерфейс, дайте ему рамку. Loop again: make _another_ label, поместите _it_ в интерфейс, дайте _it_ кадр - другой кадр. Петля снова ... Понимаете? Один цикл должен охватывать весь этот набор вещей. – matt
Тогда сначала не используйте цикл. Просто практикуйте, создав одно текстовое поле и поместив его в интерфейс. Затем сделайте одно текстовое поле и поместите его в интерфейс, а затем создайте поле _another_ test и поместите _it_ в интерфейс. Другими словами, просто создайте два текстовых поля и поместите их как в интерфейс, так и в разные места. Если вы научитесь это делать, будет очевидно, как повторить это как цикл, потому что вы можете видеть, что общего, а что отличается. – matt