2015-02-11 5 views
6

मेरे आवेदन में मेरे पास एक कॉलम के साथ एक दृश्य आधारित एनएसटीबल व्यू है। पंक्तियों का हाइलाइट रंग नियमित (नीला) पर सेट होता है। मुझे उस रंग को अपने कस्टम रंग में बदलने की जरूरत है। इंटरफ़ेस बिल्डर में मैंने इसे बदलने की कोशिश की लेकिन केवल एक ही विकल्प "कोई नहीं, नियमित और स्रोत सूची" है। https://stackoverflow.com/a/9594543/3065901कोको ओएसएक्स एनएसटीबलव्यू चेंज पंक्ति हाइलाइट रंग

मैंने पढ़ा है कि मैं इस प्रतिनिधि विधि का उपयोग करने के लिए है, लेकिन मैं जानता हूँ कि यह कैसे उपयोग करने के लिए न कि:

मुझे कोई सफलता के साथ इस पोस्ट समाधान की कोशिश की।

- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row 

मैंने उस विधि में पंक्ति खींचने की कोशिश की लेकिन मुझे अमान्य संदर्भ चेतावनियां मिलीं और पंक्ति अभी भी एक ही higlight के साथ रखती है। कृपया इस प्रतिनिधि विधि का उपयोग करने का एक सरल उदाहरण पोस्ट करें:

कृपया सहायता चाहिए। अग्रिम में धन्यवाद।

+0

आप दृश्य आधारित tableView या सेल आधारित का उपयोग कर रहे में रेखा से नीचे जोड़ें। – Srinidhi

+0

आईएम व्यू आधारित – user3065901

उत्तर

8

drawRow नमूना इस link से ओवरराइड।

MyNSTableRowView.h

#import <Cocoa/Cocoa.h> 
@interface MyNSTableRowView : NSTableRowView 
@end 

MyNSTableRowView.m

#import "MyNSTableRowView.h" 

@implementation MyNSTableRowView 
- (id)init 
{ 
    if (!(self = [super init])) return nil; 
    return self; 
} 

- (void)drawSelectionInRect:(NSRect)dirtyRect { 
    if (self.selectionHighlightStyle != NSTableViewSelectionHighlightStyleNone) { 
    NSRect selectionRect = NSInsetRect(self.bounds, 2.5, 2.5); 
    [[NSColor colorWithCalibratedWhite:.65 alpha:1.0] setStroke]; 
    [[NSColor colorWithCalibratedWhite:.82 alpha:1.0] setFill]; 
    NSBezierPath *selectionPath = [NSBezierPath bezierPathWithRoundedRect:selectionRect 
                   xRadius:6 yRadius:6]; 
    [selectionPath fill]; 
    [selectionPath stroke]; 
    } 
} 
@end 

AppDelegate.m

- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row 
{   
    MyNSTableRowView *rowView = [[MyNSTableRowView alloc]init]; 
    return rowView; 
} 
2

आप सेल आधारित tableview का उपयोग कर रहे हैं, तो कोई भी NSTableView को NSTableView selectionHighLightStyle निर्धारित करते हैं, और नीचे

- (void)drawRow:(NSInteger)row clipRect:(NSRect)clipRect { 
     NSColor* bgColor = Nil; 
    // Set the color only when its first responder and key window 
    if (self == [[self window] firstResponder] && [[self window] isMainWindow] && [[self window] isKeyWindow]) 
    { 
     bgColor = [NSColor brownColor]; 
    } 
    else 
    { 
     bgColor = [NSColor windowBackgroundColor];; 
    } 

    NSIndexSet* selectedRowIndexes = [self selectedRowIndexes]; 
    if ([selectedRowIndexes containsIndex:row]) 
    { 
     [bgColor setFill]; 
     NSRectFill([self rectOfRow:row]); 
    } 
    [super drawRow:row clipRect:clipRect]; 
} 
7

यहाँ स्विफ्ट 3 में user3065901 के जवाब है:

class MyNSTableRowView: NSTableRowView { 

    override func drawSelection(in dirtyRect: NSRect) { 
     if self.selectionHighlightStyle != .none { 
      let selectionRect = NSInsetRect(self.bounds, 2.5, 2.5) 
      NSColor(calibratedWhite: 0.65, alpha: 1).setStroke() 
      NSColor(calibratedWhite: 0.82, alpha: 1).setFill() 
      let selectionPath = NSBezierPath.init(roundedRect: selectionRect, xRadius: 6, yRadius: 6) 
      selectionPath.fill() 
      selectionPath.stroke() 
     } 
    } 
} 

NSTableViewDelegate:

func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? { 
    return MyNSTableRowView() 
} 
+0

का उपयोग कर आप बहुत ही अच्छे हैं! इस समाधान के लिए धन्यवाद। – ixany

+0

यह बहुत अच्छी तरह से काम करता है, लेकिन मेरी परेशानी यह है कि पंक्ति हाइलाइट उस रंग को तब भी रहता है जब टेबल "धुंधला" स्थिति में होता है। उदाहरण के लिए, यदि आप एक पंक्ति का चयन करते हैं, तो 'NSTextField' में क्लिक करें, तालिका पंक्ति अभी भी हाइलाइट की गई है लेकिन पाठ फिर से अंधेरा हो जाता है। यहां एक उदाहरण वीडियो है: https://d.pr/v/0KmToP ... किसी भी विचार को उस राज्य की पंक्ति पृष्ठभूमि रंग को कैसे बदला जाए? –

0

अपने tableview विधि

ObjectiveC

[yourtableview setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleNone]; 

स्विफ्ट

yourtableview.selectionHighlightStyle = .none 
संबंधित मुद्दे