2014-05-07 32 views
0

我正在继承NSTabView以定制外观。我想使用NSButtonCells的NSMatrix来选择选项卡。我设法在我的NSTabView子类的initWithFrame:方法中添加带有按钮的NSMatrix。我无法工作的是以编程方式设定目标和行动。这里是我的尝试:在自定义视图中添加按钮(NSRadioModeMatrix)的NSMatrix,设置目标/动作

定义TAB_WIDTH 24.0f

定义TAB_HEIGHT 24.0f

- (id)initWithFrame:(NSRect)frameRect 
{ 
    self = [super initWithFrame:frameRect]; 

    if (self) { 

     NSInteger numberOfTabs = 5; 
     NSInteger tabSpacing = 8; 

     NSSize cellSize = NSMakeSize(TAB_WIDTH, TAB_HEIGHT); 
     NSSize interCellSpacing = NSMakeSize(tabSpacing, 0); 

     CGFloat tabSelectorWidth = TAB_WIDTH * numberOfTabs + tabSpacing * numberOfTabs - 1; 
     CGFloat xOrigin = (frameRect.size.width - tabSelectorWidth)/2; 

     NSRect tabSelectorFrame = NSMakeRect(xOrigin, 0, tabSelectorWidth, TAB_HEIGHT); 

     NSButtonCell *cellPrototype = [[NSButtonCell alloc] init]; 

     [cellPrototype setBordered:NO]; 

     _tabSelector = [[NSMatrix alloc] initWithFrame:tabSelectorFrame 
                mode:NSRadioModeMatrix 
              prototype:cellPrototype 
              numberOfRows:1 
             numberOfColumns:5]; 

     [_tabSelector setTarget:self]; 
     [_tabSelector setAction:@selector(selectedTab)]; 

     [_tabSelector setCellSize:cellSize]; 
     [_tabSelector setIntercellSpacing:interCellSpacing]; 

     NSArray *theCells = [_tabSelector cells]; 

     [theCells[0] setImage:[NSImage imageNamed:@"tab1"]]; 
     [theCells[1] setImage:[NSImage imageNamed:@"tab2"]]; 
     [theCells[2] setImage:[NSImage imageNamed:@"tab3"]]; 
     [theCells[3] setImage:[NSImage imageNamed:@"tab4"]]; 
     [theCells[4] setImage:[NSImage imageNamed:@"tab5"]]; 

     [self addSubview:_tabSelector]; 

     [self setDrawsBackground:NO]; 
     [self setTabViewType:NSNoTabsNoBorder]; 
    } 

    return self; 
} 

- (void)selectTab:(NSMatrix *)sender 
{ 
    NSLog(@"selected tab"); 
} 

根据需要的图绘,但点击按钮不会调用对象的方法。

我已经试过这里描述Programatically create and position an NSButton in an OS X app?

这一工程以编程按钮添加到标准的IB视图,但事情在我的自定义视图土崩瓦解。任何人都可以给我一个暗示我缺少的东西吗?

马丁

+0

猜测:尝试使用'id'而不是'NSMatrix *'作为sender'的''为在selectTab'类型 - - 我不确定这里的“发件人”是矩阵还是嵌入式按钮。它可能是通过找出哪个按钮是发送者来确定被点击的内容的范例。 – stevesliva

回答

2

尝试改变

` [_tabSelector setAction:@selector(selectedTab)];` 

` [_tabSelector setAction:@selector(selectedTab:)];` 
+0

是的,它做到了。谢谢你的帮助! – Martin

+1

@Martin如果你还在身边,你应该接受这是正确的答案。 –

+0

没什么大不了的。他受益。其他人也可能受益。对于第一次使用该成语的用户来说,解决方案是一个错字或容易遗漏冒号。 – uchuugaka

相关问题