2012-06-07 3 views
1

Я делаю свое первое приложение для Mac OS X, и у меня возникла проблема.IBAction в представлении ячейки таблицы не будет запущен

Я создал NSTableView в моем окне, связанном с NSArrayController, и я хотел бы вызвать метод после остановки, чтобы отредактировать ячейку текстового поля. Поэтому я выбрал для вызова действия, когда конец редактирования, как вы можете увидеть на следующем скриншоте:

enter image description here

После, я создал IBAction для него:

Он генерируется этот код в моем AppDelegate.h:

- (IBAction)stopEditingHeaderNameCell:(id)sender; 

А потом я редактировал IBAction в AppDelegate.m в порядке чтобы показать сообщение NSLog при редактировании ячейки:

- (IBAction)stopEditingHeaderNameCell:(id)sender 
{ 
    NSLog(@"test"); 
} 

Однако, когда я перестану редактирования ячейки, нажав войти или нажав на другой элемент, ничего не происходит. Я уже пытался применить этот IBAction к NSTextField, и он работает отлично, но он не вызывает IBAction при применении к этой ячейке текстового поля.

Может ли кто-нибудь помочь мне решить эту проблему?

Спасибо!

ответ

1

Это не так, как вы это делаете с ячейками текстового поля в виде таблицы. Вам нужно, чтобы ваше приложение делегировало делегат таблицы (вы можете подключить его в IB), а затем реализовать controlTextDidEndEditing :. Этот метод будет вызываться, когда вы закончите редактирование (путем выведения из ячейки или нажатия на другую строку или столбец).

+0

Спасибо, он работал как шарм. Теперь я пытаюсь получить некоторые свойства параметра NSNotification (obj), который отправляется этой функции. Я попытался получить некоторые данные, такие как [obj value], но я получаю некоторые ошибки, например: «- [NSConcreteNotification key]: непризнанный селектор, отправленный экземпляру 0x7fcf90d66150» и «Исключение обнаружено при обработке ввода ключа». Как я могу поймать некоторую информацию, такую ​​как ее значение, номер строки и прочее, чтобы я мог манипулировать другими ячейками своей строки на основе ее содержимого? –

+0

[объект obj] даст вам ссылку на представление таблицы, поэтому вы можете использовать [[объект obj] selectedRow], чтобы узнать, какая строка была выбрана. Эта строка: [[obj.userInfo valueForKey: @ "NSFieldEditor"] string] получит новое значение строки. – rdelmar

+0

Хотя [[obj.userInfo valueForKey: @ "NSFieldEditor"] string] возвращает новое содержимое успешно, [[объект объекта obj] выбранRow] возвращает «(null)», когда я печатаю его с помощью NSW (@ "% @" , [tableView selectedRow]); '. P.S .: Я сохранил объект [obj] в переменной tableView с помощью 'NSTableView * tableView = (NSTableView *) [объект obj];' –