حقول NSTextField متعددة في NSTableCellView؛الأول فقط يمكن تحريره مباشرة
-
21-12-2019 - |
سؤال
لدي عدة NSTextFields في NSTableCellView الخاص بي:
مع إجراء النقر المزدوج، أتصل [self.outlineView editColumn:0 row:clickedRow withEvent:nil select: YES];
والذي يعمل على تفعيل التحرير في حقل النص الأول.لقد قمت أيضًا بإعداد nextKeyViews في IB حتى يتمكن المستخدم من الضغط على مفتاح Tab للتبديل بين جميع الحقول.ولكن عندما أحاول تحديد حقول النص مباشرةً بالضغط على مفتاح الماوس، فإن الأمر لا يعمل أبدًا.فهو يقوم فقط بتحديد/إلغاء تحديد التحرير على NSTableCellView، وبالتالي يقوم فقط بتحرير حقل النص الأول في كل مرة.
كيف يمكنني تشغيل هذا حتى أتمكن من تحديد الحقل الصحيح وتحريره؟
المحلول
وجدت الحل:
- فئة فرعية NSTableView / NSOutlineView
- في فئة فرعية، تجاوز
- (void) mouseDown:(NSEvent *)theEvent
في الماوس داون:
NSPoint selfPoint = [self convertPoint:theEvent.locationInWindow fromView:nil];
NSInteger row = [self rowAtPoint:selfPoint];
if (row>=0) [(ContactInfoTableCellViewMac *)[self viewAtColumn:0 row:row makeIfNecessary:NO]
mouseDownForTextFields:theEvent];
في ContactInfoTableCellViewMac:
- (void) mouseDownForTextFields:(NSEvent *)theEvent {
if ((NSCommandKeyMask | NSShiftKeyMask) & [theEvent modifierFlags]) return;
NSPoint selfPoint = [self convertPoint:theEvent.locationInWindow fromView:nil];
for (NSView *subview in [self subviews])
if ([subview isKindOfClass:[NSTextField class]])
if (NSPointInRect(selfPoint, [subview frame]))
[[self window] makeFirstResponder:subview];
}
المرجع الكامل: الرد على أحداث الماوس في حقل النص في عرض الجدول القائم على العرض
لا تنتمي إلى StackOverflow