Я только что начал изучать реактивные какао. Я пишу приложение какао, где я хочу включить NSButton, только если в NSTableView выбрана хотя бы одна строка.ReactiveCocoa Включить NSButton на основе состояния выбора NSTableView
Я использую следующий код в awakeFromNib
RACSignal *enableSignal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
@strongify(self);
if ([self.genreListTableView numberOfSelectedRows] > 0) {
[subscriber sendNext:@YES];
} else {
[subscriber sendNext:@NO];
}
return nil;
}];
[self.addButton rac_liftSelector:@selector(setEnabled:)
withSignals:enableSignal,nil];
Этот код выполняется хорошо, и сделал AddButton отключены во время запуска приложения, поскольку не было ни в одной строке выбран Изначально.
Я хочу, чтобы кнопка добавления включалась, когда была выбрана запись TableView. Я не знаю, как достичь реактивным способом.
Я мог бы достичь требуемого поведения следующим образом. Не уверен, что это правильный способ его достижения.
[[self rac_signalForSelector:@selector(tableViewSelectionDidChange:)
fromProtocol:@protocol(NSTableViewDelegate)] subscribeNext:^(RACTuple *value) {
NSNotification *notification = value.first;
if (self.genreListTableView == notification.object) {
if ([self.genreListTableView numberOfSelectedRows] > 0) {
[self.addButton setEnabled:TRUE];
} else {
[self.addButton setEnabled:FALSE];
}
}
}];
Любое предложение принято для удовлетворения требований реактивным способом.
Спасибо
Я подвожу ошибку компиляции «Ни один метод геттер для чтения из собственности» в RAC (self.addButton, включен). NSButton не имеет такого свойства, как UIButton. – jpsasi
Обновлен мой ответ на адрес, @jpsasi. –
компиляция проблема разрешена. но теперь у меня есть время выполнения AssertFailure со следующим сообщением об ошибке: «Signal имя: -enabled уже привязан к ключу« включено »на объекте , добавление сигнала < RACDynamicSignal: 0x61000024b940> name: [RACObserve (, numberOfSelectedRows)] -map: isdedeined behavior " –
jpsasi