Согласно Apple's documentation on [NSTableViewDelegate tableView:shouldEditTableColumn:row:]
, «этот метод действителен только для табличных представлений на основе NSCell». Каков его эквивалент для табличных представлений на основе представления? Я хотел бы заменить встроенное редактирование по умолчанию с помощью специального редактирования.tableView: shouldEditTableColumn: строка: для NSTableView на основе представления
ответ
В этом делетете нет необходимости в представлении таблиц на основе представления.
В этом случае вам необходимо создать, например, некоторый подкласс NSView. Также может быть nib-файл.
Предположим, у вас есть класс с именем CustomCellView, имеющий несколько точек. CustomCellView.h
файл
#define kCustomCellViewReusableIdentifier @"kCustomCellViewReusableIdentifier" // NSTableView reuses cell views
@interface CustomCellView : NSView
@property (weak) IBOutlet NSImageView *imageView;
@property (weak) IBOutlet NSTextField *textField;
- (void)setCellEditable:(BOOL)editable;
@end
Вот ваш CustomCellView.m
файл
@implementation CustomCellView
- (void)awakeFromNib
{
// paste your ui initializing code here
}
- (void)prepareForReuse
{
// this method will call each time cell reuses
}
- (void)setCellEditable:(BOOL)editable
{
[self.textField setEditable:editable];
// some other code
}
@end
Не забудьте создать острия-файл и подключить розетки. У вашего класса NSTableView должен быть некоторый код инициализации для повторного использования. MyTableViewController.m
- (void)initUI
{
NSString *nibName = NSStringFromClass([CustomCellView class]);
[self.tableView registerNib:[[NSNib alloc] initWithNibNamed:nibName bundle:nil]
forIdentifier:kCustomCellViewReusableIdentifier];
}
#pragma mark - table view data source methods
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
CustomCellView *view=[tableView makeViewWithIdentifier:kCustomCellViewReusableIdentifier owner:nil];
[view setCellEditable:someCondition]; //
return view;
}
#pragma mark - operations
- (void)setViewAtColumn:(NSTableColumn *)tableColumn row:(NSInteger)row editable:(BOOL)editable
{
CustomCellView *view=[self.tableView viewAtColumn:tableColumn row:row makeIfNecessary:NO]; //no need to create it if it's not exists - we'll set the data in NSTableViewDataSource method
if (view) // if it's exists
[view setCellEditable:editable];
}
Комментируя подход отеля Astoria:
inconvient «проблема» с необходимостью изменить редактируемость текстового поля, когда редактируемость изменения модели является то, что вы должны «активно» отслеживать редактируемость модели и обновление редактируемости текстового поля.
В отличие от подхода делегата табличного представления, который требует редактирования, до тех пор, пока пользователь не попытается сделать редактирование, в этот момент делегат просто вернется, может ли модель быть отредактирована или нет. Там гораздо меньше настроек и меньше возможностей для совершения ошибки. (например, в зависимости от того, как вы контролируете/отвечаете на редактируемость в модели, вы можете пропустить изменение, и теперь пользователь может неправильно редактировать или не редактировать поле.)
Таким образом, другой подход заключается в воссоздании делегации определения редактируемости в момент, когда пользователь пытается отредактировать. Для этого вы должны подклассифицировать NSTextField
, переопределить «правое пятно», спросить делегата и разрешить или запретить редактирование.
«Правильное пятно», по-видимому, будет отменено acceptsFirstResponder
и возвращает НЕТ.
- (BOOL)acceptsFirstResponder
{
BOOL accepts = [super acceptsFirstResponder];
if (accepts) {
if ([self.delegate respondsToSelector:@selector(textFieldShouldBecomeEditable:)]) {
accepts = [self.delegate textFieldShouldBecomeEditable:self];
}
}
return accepts;
}
С учетом указанных выше, до тех пор, как ДА, делегат называется полем editable
-х, чтобы иметь окончательное решение.
В зависимости от вашего приложения это может быть более желательным, потому что мониторинг изменений в редактируемости модели не является прямым. Однако, как правило, лучше всего использовать стандартный подход, просто устанавливающий свойство поля editable
.
- 1. изменение размера nstableview на основе представления
- 2. NSTableView Строка Высота на основе NSStrings
- 3. Изменить цвет выбора на основе представления NSTableView
- 4. Возможно ли создать NSTableView на основе представления только в коде?
- 5. Выбор на основе NSTableView?
- 6. NSComboBox привязка не работает в NSTableView на основе представления
- 7. Цель Tableview (_: objectValueFor: строка :)
- 8. NSTableView transparent TableView
- 9. drawRect не вызывается для представления ячейки NSTableView
- 10. Подсветка выделения на основе NSTableView
- 11. Программно добавляя столбцы (с привязками) к NSTableView на основе представления?
- 12. привязка аргумента NSButton в NSTableView на основе представления
- 13. Раскраски строк в представлении на основе NSTableview
- 14. Что отличает NSTableView на основе ячеек и NSTableView от просмотра?
- 15. конфликтующие типы для '- (ID) Tableview: (NSTableView *) Tableview objectValueForTableColumn: (NSTableColumn *) TableColumn ряд: (целое) строка'
- 16. подсказке для просмотра на основе NSTableView
- 17. NSDateFormatter в представлении на основе NSTableView
- 18. Как потреблять «изменить» событие для NSTableView
- 19. Представления NSTableView, основанные на представлении от XIB?
- 20. "tableView: viewForTableColumn: row:" получает вызов вместо "tableView: objectValueForTableColumn: row:" для таблицы на основе таблицы
- 21. Каким образом NSTableView устанавливает режим контента (на основе представления или на основе ячеек) по коду?
- 22. Редактировать данные в модели в соответствии с вводом пользователя в NSTableView на основе представления
- 23. Расширение для основанного на представлении NSTableView
- 24. Добавление объекта в столбец в NSTableView на основе ячейки?
- 25. Вид на основе NSTableView, делает высоту строки зависит от содержания
- 26. Как увеличить высоту строки в NSTableView на основе текстового содержимого?
- 27. Как перенести пользовательскую ячейку представления над строками таблицы в NSTableView?
- 28. JavaFX: TableView изменения цвета строка на основе значения столбца
- 29. Как заполнить NSPopupButton из CoreData в представлении на основе NSTableView
- 30. Строка выбора на tableView iOS
Вы нашли ответ? – Wesley
Ожидается, что представления таблиц на основе представлений будут использовать 'NSImageView',' NSTextField', 'NSImageView' и т. Д. Для своих ячеек, поэтому не имеет смысла иметь' [NSTableViewDelegate tableView: shouldEditTableColumn: row:] 'что-то больше связано с редактированием текста (по умолчанию в ячейках представления используются «NSTextFieldCell» для ячеек, и он содержит только текст). Если вы хотите контролировать редактирование текстовой ячейки, вы можете использовать 'NSTextField' и установить' [NSTextField setEditable: NO] '. – VolenD