当前位置: 首页 > 面试题库 >

有没有办法在Swift中以编程方式设置NSCollectionView?

高修筠
2023-03-14
问题内容

我来自iOS开发,我想知道是否可以NSCollectionViewUICollectionViewiOS中那样以编程方式设置?并添加NSCollectionViewItemsin代码。还是设置a
NSCollectionView使用绑定的唯一方法?

谢谢!


问题答案:

感谢@stevesliva为我指出了 。我将其转换为Swift。这就是我得到的。

我在ViewController中创建一个NSCollectionView:

import Cocoa

class ViewController: NSViewController {

var titles = [String]()
var collectionView: NSCollectionView?

override func viewDidLoad() {
    super.viewDidLoad()

    self.titles = ["Banana", "Apple", "Strawberry", "Cherry", "Pear", "Pineapple", "Grape", "Melon"]
    collectionView = NSCollectionView(frame: self.view.frame)
    collectionView!.itemPrototype = CollectionViewItem()
    collectionView!.content = self.titles
    collectionView!.autoresizingMask = NSAutoresizingMaskOptions.ViewWidthSizable | NSAutoresizingMaskOptions.ViewMaxXMargin | NSAutoresizingMaskOptions.ViewMinYMargin | NSAutoresizingMaskOptions.ViewHeightSizable | NSAutoresizingMaskOptions.ViewMaxYMargin

    var index = 0
    for title in titles {
        var item = self.collectionView!.itemAtIndex(index) as! CollectionViewItem
        item.getView().button?.title = self.titles[index]
        index++
    }
    self.view.addSubview(collectionView!)

}
}

在ViewController中创建的CollectionViewItem只需加载一个视图,即可在其中设置项目视图本身。

import Cocoa

class CollectionViewItem: NSCollectionViewItem {

var itemView: ItemView?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do view setup here.
}

override func loadView() {
    self.itemView = ItemView(frame: NSZeroRect)
    self.view = self.itemView!
}

func getView() -> ItemView {
    return self.itemView!
}
}

视图本身:

import Cocoa

class ItemView: NSView {

let buttonSize: NSSize = NSSize(width: 100, height: 20)
let itemSize: NSSize = NSSize(width: 120, height: 40)
let buttonOrigin: NSPoint = NSPoint(x: 10, y: 10)

var button: NSButton?

override func drawRect(dirtyRect: NSRect) {
    super.drawRect(dirtyRect)

    // Drawing code here.
}

override init(frame frameRect: NSRect) {
    super.init(frame: NSRect(origin: frameRect.origin, size: itemSize))
    let newButton = NSButton(frame: NSRect(origin: buttonOrigin, size: buttonSize))
    newButton.bezelStyle = NSBezelStyle.RoundedBezelStyle
    self.addSubview(newButton)
    self.button = newButton;
}

required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func setButtonTitle(title: String) {
    self.button!.title = title
}
}

要设置按钮标题,我使用了一种技巧。(ViewController中的for循环)如果有更好的方法设置标题,请随时发表评论。



 类似资料:
  • 当我点击任何编辑文本时,我想调整我的键盘。我在Android清单中使用windowSoftInputMode,但当我使用搜索编辑文本时,它覆盖了整个区域。键盘和底部布局覆盖整个区域

  • 问题内容: 来自目标C的您可以在2个对象之间调用函数以使它们维护一个引用,如果在运行时您不希望在删除该对象的引用之前也不要破坏该对象的话,这会很方便。迅捷有与此类似的东西吗? 问题答案: 这是一个从jckarter的答案衍生而来的简单但完整的示例。 它显示了如何向现有类添加新属性。它通过在扩展块中定义计算属性来实现。计算的属性存储为关联的对象: 编辑: 如果需要支持获取未初始化属性的值并避免发生错

  • 问题内容: 我看到了一些示例代码,它们将相同的OnClick事件分配给Android中的所有按钮(即使它们执行的动作完全不同)。如何用Swift做 Android示例: 注意:我不想以编程方式创建按钮。 问题答案: 在iOS上,您没有设置监听器;你添加一个目标(物体)和行动(方法签名,在iOS的说法“选择”)将(这是一个子类): 在这种情况下,第一个参数是目标对象。该操作是一个选择器(方法签名),

  • Spring HATEOAS提供了方便的ControllerLinkBuilder来创建指向控制器方法的链接,这些方法将作为HREF添加到返回给客户端的JSON/XML中。例如: ... 可能会生成类似以下内容的JSON: 然而... 我倾向于通过反向代理访问我的服务。我想大多数人可能会这样做。这让我可以在不同的端口上运行多个服务,但让我可以通过相同的基本URL访问它们。不幸的是,通过代理访问意味

  • 问题内容: 我可以看到文档说我们可以在文档上设置,但不能在索引/索引上设置。还想知道如果我们设置它是否对性能有影响。 问题答案: 已为每个索引启用,但有效期为每个文档。 如果您希望索引“过期”,请删除它们。更简单,更高效。 是的,对性能有影响。Elasticsearch处理“过期”数据的“方式”是创建基于时间的索引。意思是,您每天或每周都会创建一个索引。在该索引中索引属于该日/周的所有内容。您决定

  • 我们可以使用这些jvm标志来确定编译阈值,但是有没有一种方法可以在运行时以编程方式确定它?