2014-10-06 53 views
0

我有一個NSButton我在NSTableView的細胞內,我想分配給它的動作和標籤有一個指標,所以我做:OSX:NSButton與標籤無法識別

NSTableCellView *cellView = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self]; 

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 
    if([tableColumn.identifier isEqualToString:@"check"]) 
    { 
     NSButton *button = (NSButton*)[cellView viewWithTag:100]; 

     if (button == nil) 
      NSLog(@"button is null"); 
     [button setTag:row]; 
     [button setAction:@selector(SelectRow:)]; 
    } 

}

- (IBAction)SelectRow:(id)sender{ 

    NSInteger index = [sender tag]; 

    NSLog(@"index:%lu", index); 
} 

你可以看到我有一個以tag = 100開頭的NSButton:我將它設置在xib文件中,並將其更改爲其行值。 但我有一個按鈕,因爲它進入條件。 在IOS這工作很好,但在OSX不...爲什麼?

回答

1

如果您只需要標籤以獲取正確的行索引,那麼我可能會爲您提供另一種解決方案。我還需要通過按鈕按下來查看視圖。而不是使用標籤,我只是要求表視圖中的按鈕superview的索引。對我來說,這是更好的方法,因爲細胞更改順序..

- (IBAction)selectRow:(NSButton *)sender { 
    NSInteger row = [_tableView rowForView:sender.superview]; 
    NSLog(@"index:%lu", index); 
} 

我希望我能夠幫助你!

+0

不要使用'sender.superview',因爲它遲早會破壞(你不擁有層次結構中的所有視圖)。討厭 - 尋找正確的超級觀點。不錯 - 創建一個自定義的子類,所以你不需要標籤或視圖搜索。 – Wain 2014-10-06 16:44:36

+0

謝謝,它工作正常與「sender.superview」,但只與「發件人」... – CrazyDev 2014-10-07 07:59:45