在表视图中插入行并设置文本字段第一响应者
insert row in tableview and set textfield first responder
我有一个 nstable 视图,其中包含 3 列和一个自定义单元格视图。
使用此代码,我向 table:
添加了一个新行
tableView.beginUpdates()
tableView.insertRows(at: IndexSet(integer: tableView.numberOfRows), withAnimation: .effectFade)
tableView.endUpdates()
let view = tableView.view(atColumn: 1, row: tableView.numberOfRows-1, makeIfNecessary: false) as! CustomCell
view.txtName.becomeFirstResponder()
这工作近乎完美,但问题是:
行将插入,文本字段成为第一个响应者,我可以在其中写入一个值,但如果我将焦点更改为该行的另一个文本字段,我的应用程序会崩溃:
2017-06-14 09:20:13.282076+0200 Programm[2206:105520] [General] An uncaught exception was raised
2017-06-14 09:20:13.282112+0200 Programm[2206:105520] [General] Row -1 out of row range [0-0] for rowViewAtRow:createIfNeeded:
2017-06-14 09:20:13.289941+0200 Programm[2206:105520] [General] (
0 CoreFoundation 0x00007fffb49ac57b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x00007fffc9bf01da objc_exception_throw + 48
2 AppKit 0x00007fffb25329fb -[NSTableRowData rowViewAtRow:createIfNeeded:] + 690
3 AppKit 0x00007fffb25fdb11 -[NSTableView viewAtColumn:row:makeIfNecessary:] + 28
4 Programm 0x000000010002019a _TFC8Programm18DokumentController7controlfTCSo9NSControl20textShouldEndEditingCSo6NSText_Sb + 394
5 Programm 0x00000001000227cf _TToFC8Programm18DokumentController7controlfTCSo9NSControl20textShouldEndEditingCSo6NSText_Sb + 79
6 AppKit 0x00007fffb25e7ba7 -[NSTextField textShouldEndEditing:] + 161
7 AppKit 0x00007fffb25d5f1f -[NSTextView(NSSharing) resignFirstResponder] + 483
8 AppKit 0x00007fffb24d7923 -[NSWindow _realMakeFirstResponder:] + 235
9 AppKit 0x00007fffb24d77e4 -[NSWindow makeFirstResponder:] + 123
10 AppKit 0x00007fffb2773fef -[NSTextView(NSPrivate) _giveUpFirstResponder:] + 261
11 AppKit 0x00007fffb25d42b7 -[NSTextView doCommandBySelector:] + 192
12 AppKit 0x00007fffb25d41d1 -[NSTextInputContext(NSInputContext_WithCompletion) doCommandBySelector:completionHandler:] + 118
13 AppKit 0x00007fffb25b1e00 -[NSKeyBindingManager(NSKeyBindingManager_MultiClients) interpretEventAsCommand:forClient:] + 2218
14 AppKit 0x00007fffb2df37b1 __84-[NSTextInputContext _handleEvent:options:allowingSyntheticEvent:completionHandler:]_block_invoke.1096 + 355
15 AppKit 0x00007fffb2df35e5 __84-[NSTextInputContext _handleEvent:options:allowingSyntheticEvent:completionHandler:]_block_invoke_3 + 80
16 AppKit 0x00007fffb25b9f59 -[NSTextInputContext tryHandleEvent_HasMarkedText_withDispatchCondition:dispatchWork:continuation:] + 93
17 AppKit 0x00007fffb2df3560 __84-[NSTextInputContext _handleEvent:options:allowingSyntheticEvent:completionHandler:]_block_invoke.1086 + 262
18 HIToolbox 0x00007fffb3eb689f __TSMProcessRawKeyEventWithOptionsAndCompletionHandler_block_invoke_5 + 70
19 HIToolbox 0x00007fffb3eb56e2 ___ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec_block_invoke + 108
20 AppKit 0x00007fffb2dec4f8 __55-[NSTextInputContext handleTSMEvent:completionHandler:]_block_invoke.314 + 2874
21 AppKit 0x00007fffb25b3835 __55-[NSTextInputContext handleTSMEvent:completionHandler:]_block_invoke_2 + 80
22 AppKit 0x00007fffb25b37b4 -[NSTextInputContext tryHandleTSMEvent_HasMarkedText_withDispatchCondition:dispatchWork:continuation:] + 93
23 AppKit 0x00007fffb25b319f -[NSTextInputContext handleTSMEvent:completionHandler:] + 2221
24 AppKit 0x00007fffb25b2883 _NSTSMEventHandler + 321
25 HIToolbox 0x00007fffb3e5bd85 _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec + 1708
26 HIToolbox 0x00007fffb3e5aff6 _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec + 428
27 HIToolbox 0x00007fffb3e5ae3f SendEventToEventTargetWithOptions + 43
28 HIToolbox 0x00007fffb3eb26d6 SendTSMEvent_WithCompletionHandler + 408
29 HIToolbox 0x00007fffb3eb2bb1 __SendUnicodeTextAEToUnicodeDoc_WithCompletionHandler_block_invoke + 400
30 HIToolbox 0x00007fffb3eb2a12 __SendFilterTextEvent_WithCompletionHandler_block_invoke + 215
31 HIToolbox 0x00007fffb3eb2727 SendTSMEvent_WithCompletionHandler + 489
32 HIToolbox 0x00007fffb3eb2511 SendFilterTextEvent_WithCompletionHandler + 236
33 HIToolbox 0x00007fffb3eb21d6 SendUnicodeTextAEToUnicodeDoc_WithCompletionHandler + 284
34 HIToolbox 0x00007fffb3eb1f8c __utDeliverTSMEvent_WithCompletionHandler_block_invoke_2 + 296
35 HIToolbox 0x00007fffb3eb1e32 __utDeliverTSMEvent_WithCompletionHandler_block_invoke + 439
36 HIToolbox 0x00007fffb3eb1bf9 TSMKeyEvent_WithCompletionHandler + 632
37 HIToolbox 0x00007fffb3eb1948 __TSMProcessRawKeyEventWithOptionsAndCompletionHandler_block_invoke_4 + 251
38 HIToolbox 0x00007fffb3eb1775 __TSMProcessRawKeyEventWithOptionsAndCompletionHandler_block_invoke_3 + 281
39 HIToolbox 0x00007fffb3eb148b __TSMProcessRawKeyEventWithOptionsAndCompletionHandler_block_invoke_2 + 308
40 HIToolbox 0x00007fffb3eb11c2 __TSMProcessRawKeyEventWithOptionsAndCompletionHandler_block_invoke + 300
41 HIToolbox 0x00007fffb3eb073a TSMProcessRawKeyEventWithOptionsAndCompletionHandler + 3604
42 AppKit 0x00007fffb2df33d1 __84-[NSTextInputContext _handleEvent:options:allowingSyntheticEvent:completionHandler:]_block_invoke.1077 + 116
43 AppKit 0x00007fffb2df2689 __204-[NSTextInputContext tryTSMProcessRawKeyEvent_orSubstitution:dispatchCondition:setupForDispatch:furtherCondition:doubleSpaceSubstitutionCondition:doubleSpaceSubstitutionWork:dispatchTSMWork:continuation:]_block_invoke.1003 + 121
44 AppKit 0x00007fffb2df24f3 -[NSTextInputContext tryTSMProcessRawKeyEvent_orSubstitution:dispatchCondition:setupForDispatch:furtherCondition:doubleSpaceSubstitutionCondition:doubleSpaceSubstitutionWork:dispatchTSMWork:continuation:] + 285
45 AppKit 0x00007fffb2df2e1b -[NSTextInputContext _handleEvent:options:allowingSyntheticEvent:completionHandler:] + 1515
46 AppKit 0x00007fffb2df2362 -[NSTextInputContext _handleEvent:allowingSyntheticEvent:] + 114
47 AppKit 0x00007fffb25b128b -[NSView interpretKeyEvents:] + 232
48 AppKit 0x00007fffb25b10a1 -[NSTextView keyDown:] + 704
49 AppKit 0x00007fffb2d132cc -[NSWindow(NSEventRouting) _reallySendEvent:isDelayedEvent:] + 4086
50 AppKit 0x00007fffb2d11f0a -[NSWindow(NSEventRouting) sendEvent:] + 541
51 AppKit 0x00007fffb2b974a8 -[NSApplication(NSEvent) sendEvent:] + 4768
52 AppKit 0x00007fffb2411427 -[NSApplication run] + 1002
53 AppKit 0x00007fffb23dbe0e NSApplicationMain + 1237
54 Programm 0x000000010001388d main + 13
55 libdyld.dylib 0x00007fffca4d1235 start + 1
56 ??? 0x0000000000000003 0x0 + 3
)
问题解决!!
在 EndEditing 中,我希望有一个选定的行。但是如果我添加一行,则不会选择该行。我将以下行添加到我的 addRow 函数中,现在它可以工作了:
tableView.selectRowIndexes(IndexSet(integer: tableView.numberOfRows-1), byExtendingSelection: false)
我有一个 nstable 视图,其中包含 3 列和一个自定义单元格视图。 使用此代码,我向 table:
添加了一个新行tableView.beginUpdates()
tableView.insertRows(at: IndexSet(integer: tableView.numberOfRows), withAnimation: .effectFade)
tableView.endUpdates()
let view = tableView.view(atColumn: 1, row: tableView.numberOfRows-1, makeIfNecessary: false) as! CustomCell
view.txtName.becomeFirstResponder()
这工作近乎完美,但问题是:
行将插入,文本字段成为第一个响应者,我可以在其中写入一个值,但如果我将焦点更改为该行的另一个文本字段,我的应用程序会崩溃:
2017-06-14 09:20:13.282076+0200 Programm[2206:105520] [General] An uncaught exception was raised
2017-06-14 09:20:13.282112+0200 Programm[2206:105520] [General] Row -1 out of row range [0-0] for rowViewAtRow:createIfNeeded:
2017-06-14 09:20:13.289941+0200 Programm[2206:105520] [General] (
0 CoreFoundation 0x00007fffb49ac57b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x00007fffc9bf01da objc_exception_throw + 48
2 AppKit 0x00007fffb25329fb -[NSTableRowData rowViewAtRow:createIfNeeded:] + 690
3 AppKit 0x00007fffb25fdb11 -[NSTableView viewAtColumn:row:makeIfNecessary:] + 28
4 Programm 0x000000010002019a _TFC8Programm18DokumentController7controlfTCSo9NSControl20textShouldEndEditingCSo6NSText_Sb + 394
5 Programm 0x00000001000227cf _TToFC8Programm18DokumentController7controlfTCSo9NSControl20textShouldEndEditingCSo6NSText_Sb + 79
6 AppKit 0x00007fffb25e7ba7 -[NSTextField textShouldEndEditing:] + 161
7 AppKit 0x00007fffb25d5f1f -[NSTextView(NSSharing) resignFirstResponder] + 483
8 AppKit 0x00007fffb24d7923 -[NSWindow _realMakeFirstResponder:] + 235
9 AppKit 0x00007fffb24d77e4 -[NSWindow makeFirstResponder:] + 123
10 AppKit 0x00007fffb2773fef -[NSTextView(NSPrivate) _giveUpFirstResponder:] + 261
11 AppKit 0x00007fffb25d42b7 -[NSTextView doCommandBySelector:] + 192
12 AppKit 0x00007fffb25d41d1 -[NSTextInputContext(NSInputContext_WithCompletion) doCommandBySelector:completionHandler:] + 118
13 AppKit 0x00007fffb25b1e00 -[NSKeyBindingManager(NSKeyBindingManager_MultiClients) interpretEventAsCommand:forClient:] + 2218
14 AppKit 0x00007fffb2df37b1 __84-[NSTextInputContext _handleEvent:options:allowingSyntheticEvent:completionHandler:]_block_invoke.1096 + 355
15 AppKit 0x00007fffb2df35e5 __84-[NSTextInputContext _handleEvent:options:allowingSyntheticEvent:completionHandler:]_block_invoke_3 + 80
16 AppKit 0x00007fffb25b9f59 -[NSTextInputContext tryHandleEvent_HasMarkedText_withDispatchCondition:dispatchWork:continuation:] + 93
17 AppKit 0x00007fffb2df3560 __84-[NSTextInputContext _handleEvent:options:allowingSyntheticEvent:completionHandler:]_block_invoke.1086 + 262
18 HIToolbox 0x00007fffb3eb689f __TSMProcessRawKeyEventWithOptionsAndCompletionHandler_block_invoke_5 + 70
19 HIToolbox 0x00007fffb3eb56e2 ___ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec_block_invoke + 108
20 AppKit 0x00007fffb2dec4f8 __55-[NSTextInputContext handleTSMEvent:completionHandler:]_block_invoke.314 + 2874
21 AppKit 0x00007fffb25b3835 __55-[NSTextInputContext handleTSMEvent:completionHandler:]_block_invoke_2 + 80
22 AppKit 0x00007fffb25b37b4 -[NSTextInputContext tryHandleTSMEvent_HasMarkedText_withDispatchCondition:dispatchWork:continuation:] + 93
23 AppKit 0x00007fffb25b319f -[NSTextInputContext handleTSMEvent:completionHandler:] + 2221
24 AppKit 0x00007fffb25b2883 _NSTSMEventHandler + 321
25 HIToolbox 0x00007fffb3e5bd85 _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec + 1708
26 HIToolbox 0x00007fffb3e5aff6 _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec + 428
27 HIToolbox 0x00007fffb3e5ae3f SendEventToEventTargetWithOptions + 43
28 HIToolbox 0x00007fffb3eb26d6 SendTSMEvent_WithCompletionHandler + 408
29 HIToolbox 0x00007fffb3eb2bb1 __SendUnicodeTextAEToUnicodeDoc_WithCompletionHandler_block_invoke + 400
30 HIToolbox 0x00007fffb3eb2a12 __SendFilterTextEvent_WithCompletionHandler_block_invoke + 215
31 HIToolbox 0x00007fffb3eb2727 SendTSMEvent_WithCompletionHandler + 489
32 HIToolbox 0x00007fffb3eb2511 SendFilterTextEvent_WithCompletionHandler + 236
33 HIToolbox 0x00007fffb3eb21d6 SendUnicodeTextAEToUnicodeDoc_WithCompletionHandler + 284
34 HIToolbox 0x00007fffb3eb1f8c __utDeliverTSMEvent_WithCompletionHandler_block_invoke_2 + 296
35 HIToolbox 0x00007fffb3eb1e32 __utDeliverTSMEvent_WithCompletionHandler_block_invoke + 439
36 HIToolbox 0x00007fffb3eb1bf9 TSMKeyEvent_WithCompletionHandler + 632
37 HIToolbox 0x00007fffb3eb1948 __TSMProcessRawKeyEventWithOptionsAndCompletionHandler_block_invoke_4 + 251
38 HIToolbox 0x00007fffb3eb1775 __TSMProcessRawKeyEventWithOptionsAndCompletionHandler_block_invoke_3 + 281
39 HIToolbox 0x00007fffb3eb148b __TSMProcessRawKeyEventWithOptionsAndCompletionHandler_block_invoke_2 + 308
40 HIToolbox 0x00007fffb3eb11c2 __TSMProcessRawKeyEventWithOptionsAndCompletionHandler_block_invoke + 300
41 HIToolbox 0x00007fffb3eb073a TSMProcessRawKeyEventWithOptionsAndCompletionHandler + 3604
42 AppKit 0x00007fffb2df33d1 __84-[NSTextInputContext _handleEvent:options:allowingSyntheticEvent:completionHandler:]_block_invoke.1077 + 116
43 AppKit 0x00007fffb2df2689 __204-[NSTextInputContext tryTSMProcessRawKeyEvent_orSubstitution:dispatchCondition:setupForDispatch:furtherCondition:doubleSpaceSubstitutionCondition:doubleSpaceSubstitutionWork:dispatchTSMWork:continuation:]_block_invoke.1003 + 121
44 AppKit 0x00007fffb2df24f3 -[NSTextInputContext tryTSMProcessRawKeyEvent_orSubstitution:dispatchCondition:setupForDispatch:furtherCondition:doubleSpaceSubstitutionCondition:doubleSpaceSubstitutionWork:dispatchTSMWork:continuation:] + 285
45 AppKit 0x00007fffb2df2e1b -[NSTextInputContext _handleEvent:options:allowingSyntheticEvent:completionHandler:] + 1515
46 AppKit 0x00007fffb2df2362 -[NSTextInputContext _handleEvent:allowingSyntheticEvent:] + 114
47 AppKit 0x00007fffb25b128b -[NSView interpretKeyEvents:] + 232
48 AppKit 0x00007fffb25b10a1 -[NSTextView keyDown:] + 704
49 AppKit 0x00007fffb2d132cc -[NSWindow(NSEventRouting) _reallySendEvent:isDelayedEvent:] + 4086
50 AppKit 0x00007fffb2d11f0a -[NSWindow(NSEventRouting) sendEvent:] + 541
51 AppKit 0x00007fffb2b974a8 -[NSApplication(NSEvent) sendEvent:] + 4768
52 AppKit 0x00007fffb2411427 -[NSApplication run] + 1002
53 AppKit 0x00007fffb23dbe0e NSApplicationMain + 1237
54 Programm 0x000000010001388d main + 13
55 libdyld.dylib 0x00007fffca4d1235 start + 1
56 ??? 0x0000000000000003 0x0 + 3
)
问题解决!! 在 EndEditing 中,我希望有一个选定的行。但是如果我添加一行,则不会选择该行。我将以下行添加到我的 addRow 函数中,现在它可以工作了:
tableView.selectRowIndexes(IndexSet(integer: tableView.numberOfRows-1), byExtendingSelection: false)