2014-10-06 3 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); 
} 

Вы можете видеть, что у меня есть NSButton, который начинается с tag = 100: я установил его в xib-файле, и я изменил его для его значения строки. Но у меня есть кнопка, потому что она входит в состояние. В IOS эта работа прекрасна, но в OSX нет ... почему?

ответ

1

Если вам нужен только тег, чтобы получить индекс правой строки, тогда у меня может быть другое решение для вас. Мне также нужно было найти представление с нажатием кнопки. Вместо того, чтобы использовать теги, я просто спросил табличный вид для индекса надстройки кнопок. Для меня это был лучший подход из-за изменения порядка ячеек.

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

Надеюсь, я был в состоянии вам помочь!

+0

Не используйте 'sender.superview', потому что рано или поздно он сломается (вы не владеете всеми представлениями в иерархии). Nasty - поиск правильного супервизора. Nice - создайте собственный подкласс, чтобы вам не нужен тэг или поиск в виде. – Wain

+0

Спасибо, он отлично работает ma не с "sender.superview", а только с "отправителем" ... – CrazyDev

Смежные вопросы