حقول NSTextField متعددة في NSTableCellView؛الأول فقط يمكن تحريره مباشرة

StackOverflow https://stackoverflow.com//questions/23025014

سؤال

لدي عدة NSTextFields في NSTableCellView الخاص بي:enter image description here

مع إجراء النقر المزدوج، أتصل [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];
}

المرجع الكامل: الرد على أحداث الماوس في حقل النص في عرض الجدول القائم على العرض

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top