- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在 osx 上使用 swift 3,我正在寻找不同 View Controller 中两个 NSTableView 之间的拖放解决方案。
对于这种情况,我有一个简单的工作解决方案,即每个 TableView 只有一列,没有自定义单元格 View 和字符串值。
源 TableView
import Cocoa
class SourceTableView: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
@IBOutlet weak var leftTableView: NSTableView!
var dataArray: NSMutableArray = ["Item 1","Item 2","Item 3"]
let pbStringType = "NSPasteBoardStringType"
let pbIndexType = "NSPasteBoardIndexType"
func numberOfRows(in tableView: NSTableView) -> Int {
return dataArray.count
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
return dataArray[row]
}
func tableView(_ tableView: NSTableView, writeRowsWith rowIndexes: IndexSet, to pboard: NSPasteboard) -> Bool {
let data = (dataArray as NSArray).objects(at:rowIndexes as IndexSet)
pboard.declareTypes([pbStringType, pbIndexType], owner: nil)
pboard.setData(NSKeyedArchiver.archivedData(withRootObject: data), forType: pbStringType)
pboard.setData(NSKeyedArchiver.archivedData(withRootObject: rowIndexes), forType: pbIndexType)
return true
}
}
目标 TableView
import Cocoa
class TargetVC2: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
@IBOutlet weak var rightTableView: NSTableView!
var dataArray: NSMutableArray = ["Item 5", "Item 6", "Item 7"]
let pbStringType = "NSPasteBoardStringType"
let pbIndexType = "NSPasteBoardIndexType"
override func viewDidLoad() {
super.viewDidLoad()
rightTableView.register(forDraggedTypes: [pbStringType])
}
func numberOfRows(in tableView: NSTableView) -> Int {
return dataArray.count
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
return dataArray[row]
}
func tableView(_ tableView: NSTableView, writeRowsWith rowIndexes: IndexSet, to pboard: NSPasteboard) -> Bool {
let data = dataArray.objects(at:rowIndexes as IndexSet)
pboard.declareTypes([pbStringType, pbIndexType], owner: nil)
pboard.setData(NSKeyedArchiver.archivedData(withRootObject: data), forType: pbStringType)
pboard.setData(NSKeyedArchiver.archivedData(withRootObject: rowIndexes), forType: pbIndexType)
return true
}
func tableView(_ tableView: NSTableView, validateDrop info: NSDraggingInfo, proposedRow row: Int, proposedDropOperation dropOperation: NSTableViewDropOperation) -> NSDragOperation {
if dropOperation == .above {
return .move
}
return []
}
func tableView(_ tableView: NSTableView, acceptDrop info: NSDraggingInfo, row: Int, dropOperation: NSTableViewDropOperation) -> Bool {
var dropRow = row
if info.draggingSource() as! NSTableView == rightTableView && tableView == rightTableView && dropOperation == .above {
let data = info.draggingPasteboard().data(forType: pbIndexType)!
let rowIndexes = NSKeyedUnarchiver.unarchiveObject(with: data) as! NSIndexSet
dataArray.removeObjects(at: rowIndexes as IndexSet)
dropRow -= rowIndexes.countOfIndexes(in: NSMakeRange(0, dropRow))
}
let data = info.draggingPasteboard().data(forType: pbStringType)!
let draggedStrings = NSKeyedUnarchiver.unarchiveObject(with: data) as! [Any]
dataArray.insert(draggedStrings, at:IndexSet(integersIn:dropRow..<(dropRow + draggedStrings.count)))
rightTableView.reloadData()
return true
}
}
但现在我需要针对以下情况的解决方案:
我通过核心数据获得的值(value):
func requestValues() {
var values= [Person]()
let appdelegate = NSApplication.shared().delegate as! AppDelegate
let context = appdelegate.persistentContainer.viewContext
let request = NSFetchRequest<Person>(entityName: "Person")
do {
values = try context.fetch(request)
SourceTableView.reloadData()
} catch { }
}
但我上面的解决方案不适用于我的新“愿望场景”
更新例如:我像这样修改了我的 SourceTabelView:
import Cocoa
struct structData {
var firstname:String
var secondname:String
}
class SourceVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
@IBOutlet weak var leftTableView: NSTableView!
var people = [structData]()
let pbStringType = "NSPasteBoardStringType"
let pbIndexType = "NSPasteBoardIndexType"
override func viewDidLoad() {
people.append(structData(firstname:"Max",secondname:"Mustermann"))
}
func numberOfRows(in tableView: NSTableView) -> Int {
return people.count
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
return people[row].firstname
}
func tableView(_ tableView: NSTableView, writeRowsWith rowIndexes: IndexSet, to pboard: NSPasteboard) -> Bool {
let data = (people as NSArray).objects(at:rowIndexes as IndexSet)
pboard.declareTypes([pbStringType, pbIndexType], owner: nil)
pboard.setData(NSKeyedArchiver.archivedData(withRootObject: data), forType: pbStringType)
pboard.setData(NSKeyedArchiver.archivedData(withRootObject: rowIndexes), forType: pbIndexType)
return true
}
}
它工作正常,但如果我拖动值为“Max”的行 => 我的应用程序崩溃并出现此错误:
2017-06-12 07:51:09.096744+0200 TableView-DragDrop[10315:1489730] -[_SwiftValue encodeWithCoder:]: unrecognized selector sent to instance 0x6080000910d0
2017-06-12 07:51:09.100198+0200 TableView-DragDrop[10315:1489730] [General] -[_SwiftValue encodeWithCoder:]: unrecognized selector sent to instance 0x6080000910d0
2017-06-12 07:51:09.129238+0200 TableView-DragDrop[10315:1489730] [General] (
0 CoreFoundation 0x00007fffaf4d657b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x00007fffc489a1da objc_exception_throw + 48
2 CoreFoundation 0x00007fffaf556f14 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3 CoreFoundation 0x00007fffaf449c93 ___forwarding___ + 1059
4 CoreFoundation 0x00007fffaf4497e8 _CF_forwarding_prep_0 + 120
5 Foundation 0x00007fffb0ed695a _encodeObject + 1241
6 Foundation 0x00007fffb0ed7f0c -[NSKeyedArchiver _encodeArrayOfObjects:forKey:] + 460
7 Foundation 0x00007fffb0ed695a _encodeObject + 1241
8 Foundation 0x00007fffb0f12492 +[NSKeyedArchiver archivedDataWithRootObject:] + 156
9 TableView-DragDrop 0x00000001000029a3 _TFC18TableView_DragDrop8SourceVC9tableViewfTCSo11NSTableView13writeRowsWithV10Foundation8IndexSet2toCSo12NSPasteboard_Sb + 915
10 TableView-DragDrop 0x0000000100002e5c _TToFC18TableView_DragDrop8SourceVC9tableViewfTCSo11NSTableView13writeRowsWithV10Foundation8IndexSet2toCSo12NSPasteboard_Sb + 108
11 AppKit 0x00007fffad6fc109 -[NSTableView _sendDataSourceWriteDragDataWithIndexes:toPasteboard:] + 102
12 AppKit 0x00007fffad6fcd06 -[NSTableView _performClassicDragOfIndexes:hitRow:event:] + 180
13 AppKit 0x00007fffad21e7b5 -[NSTableView _performDragFromMouseDown:] + 468
14 AppKit 0x00007fffad21cadf -[NSTableView mouseDown:] + 735
15 AppKit 0x00007fffad84024f -[NSWindow(NSEventRouting) _handleMouseDownEvent:isDelayedEvent:] + 6341
16 AppKit 0x00007fffad83ca6c -[NSWindow(NSEventRouting) _reallySendEvent:isDelayedEvent:] + 1942
17 AppKit 0x00007fffad83bf0a -[NSWindow(NSEventRouting) sendEvent:] + 541
18 AppKit 0x00007fffad6c0681 -[NSApplication(NSEvent) sendEvent:] + 1145
19 AppKit 0x00007fffacf3b427 -[NSApplication run] + 1002
20 AppKit 0x00007fffacf05e0e NSApplicationMain + 1237
21 TableView-DragDrop 0x000000010000444d main + 13
22 libdyld.dylib 0x00007fffc517b235 start + 1
23 ??? 0x0000000000000003 0x0 + 3
)
2017-06-12 07:51:09.148230+0200 TableView-DragDrop[10315:1489730] *** -[NSKeyedArchiver dealloc]: warning: NSKeyedArchiver deallocated without having had -finishEncoding called on it.
最佳答案
崩溃的原因看起来像,Swift 运行时无法为您的结构类型找到 encodeWithCoder。
您可能需要实现 encodeWithCoder。您的 structData 结构应符合 encodeWithCoder。
请查看以下链接以了解如何执行相同操作
关于ios - nstableview 拖放自定义单元格 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44488047/
我已经尝试在我的 CSS 中添加一个元素来删除每三个 div 的 margin-right。不过,似乎只是出于某种原因影响了第 3 次和第 7 次。需要它在第 3、6、9 等日工作... CSS .s
如何使 div/input 闪烁或“脉冲”?例如,假设表单字段输入了无效值? 最佳答案 使用 CSS3 类似 on this page ,您可以将脉冲效果添加到名为 error 的类中: @-webk
我目前正在尝试构建一个简单的 wireframe来自 lattice 的情节包,但由沿 y 轴的数百个点组成。这导致绘图被线框网格淹没,您看到的只是一个黑色块。我知道我可以用 col=FALSE 完全
在知道 parent>div CSS 选择器在 IE 中无法识别后,我重新编码我的 CSS 样式,例如: div#bodyMain div#paneLeft>div{/*styles here*/}
我有两个 div,一个在另一个里面。当我将鼠标悬停 到最外面的那个时,我想改变它的颜色,没问题。但是,当我将鼠标悬停 到内部时,我只想更改它的颜色。这可能吗?换句话说,当 将鼠标悬停到内部 div 上
我需要展示这样的东西 有人可以帮忙吗?我可以实现以下输出 我正在使用以下代码:: GridView.builder( scrollDirection: Axis.vertical,
当 Bottom Sheet 像 Android 键盘一样打开时,是否有任何方法可以手动上推布局( ScrollView 或回收器 View 或整个 Activity )?或者你可以说我想以 Bott
我有以下代码,用于使用纯 HTML 和 CSS 显示翻转。当您将鼠标悬停在文本上时,它会更改左右图像。 在我测试的所有浏览器中都运行良好,Safari 4 除外。据我收集的信息,Safari 4 支持
我构建了某种 CMS,但在使用 TinyMCE 和 Bootstrap 时遇到了一些问题。 我有一个页面,其中概述了一个 div,如果用户单击该 div,他们可以从模态中选择图像。该图像被插入到一个
出于某种原因,当我设置一个过渡时,当我的鼠标悬停在一个元素上时,背景会改变颜色,它只适用于一个元素,但它们都共享同一个类?任何帮助我的 CSS .outer_ad { position:rel
好吧,这真的很愚蠢。我不知道 Android Studio 中的调试监视框架发生了什么。我有 1.5.1 的工作室。 是否有一些来自 intellij 的 secret 知识来展示它。 最佳答案 与以
我有这个标记: some code > 我正在尝试获取此布局: 注意:上一个和下一个按钮靠近#player 我正在尝试这样: .nextBtn{
网站:http://avuedesigns.com/index 首页有 6 个菜单项。我希望每件元素在您经过时都有自己的颜色。 这是当您将鼠标悬停在 div 上时将所有内容更改为白色的行 li#hom
我需要在 index.php 文件中显示它,但没有任何效果。我所有的文章都没有正确定位。我将其用作代码: 最佳答案 您可以首先检查您
我是一名优秀的程序员,十分优秀!