我是 macOS 应用程序编写新手,所以我正在使用故事板做一些事情。我在网上找到了一个现有的应用程序源演示,并对其进行了修改。我从使用它中学到了很多东西,但我还没有找到我需要的一切。 大部分在线帮助适用于 iOS 应用程序,并且不会完全转移。 其他的已经过时了。
这是我到目前为止所拥有的。
我有一个带有子视图控制器的窗口控制器,其中包含一个表视图和一个从图像视图派生的自定义类。我正在使用它,这样我就可以自定义拖放。
示例中的表视图有一个委托,它从数组中读取数据以填充表。我可以从数组中添加、减去等文本项,调用 tableview 的
reloadData()
方法并填充表格。这一点效果很好。
我想要做的是,当我将图像拖到自定义图像视图类上时,它会获取图像的文件名并将其添加到父级的表视图中。
我想我可以做到的一种方法是使用共享数据,但这相当混乱。更简洁的方法是让子自定义图像视图向父级发送事件,然后由父级处理该事件。只是我不知道该怎么做。我看到一些使用协议的东西,但那是针对 iOS 的,无法正确传输。
我正在使用 macOS Montery 和 Xcode 14.2。
我在协议上发现了一些内容,我复制、粘贴并更改了类名。但是,缺少一些属性/方法。大多数这种性质的在线代码似乎是为 iOS 编写的。
不是最理想的,但我的解决方案是在我的视图控制器中为我的自定义图像视图类添加 IBAction。
@IBAction func ImageHandler(_ sender: MyImageClass)
{
if(sender.DraggedFile != "")
{
let thisFile:URL = URL(fileURLWithPath: sender.DraggedFile )
filesList.append(thisFile)
tableView.reloadData()
}
}
然后在我的自定义类中放置一个名为“DraggedFile”的属性,当拖/放操作完成时,该属性在类中设置。效果很好。