rac_command 只响应单击
rac_command only responds to single click
我正在尝试使用 Reactive Cocoa 检测对 UIElement(如按钮)的点击,这是第一次在 MVVM 架构中使用 RAC。
我在 ViewController 中为我的按钮设置了 rac_command。
addContactBtn.rac_command = viewModel.addContact
我的 ViewModel 执行以下操作:
func init(){
self.addContact = RACCommand() {
(any:AnyObject!) -> RACSignal in
return RACSignal.createSignal({
(subscriber: RACSubscriber!) -> RACDisposable! in
print("creating viewModel")
let viewModel = ContactAddViewModel(services: self.services)
self.services.pushViewModel(viewModel)
return RACDisposable(block: {
})
})
}
}
但是,命令只执行一次,然后当我弹出视图控制器并返回原始状态时按钮处于禁用状态 viewController。如何检测按钮点击任意次数?
显然,您错过了一些东西并且犯了一个简单的错误。
RACCommand
期望信号在单击按钮时 有效 并在单击后 处置 业务-逻辑(如创建 viewModel,然后在上面 中的 pushViewModel)执行。也就是说每个按钮点击事件关联一个信号,不是共享一个唯一的信号,而是有共同的信号内在逻辑。如果信号未完成或出现错误,则响应的点击事件未完成,因此按钮 已禁用 。
以下修改后的代码可能是正确的。
func init(){
self.addContact = RACCommand() {
(any:AnyObject!) -> RACSignal in
return RACSignal.createSignal({
(subscriber: RACSubscriber!) -> RACDisposable! in
print("creating viewModel")
let viewModel = ContactAddViewModel(services: self.services)
self.services.pushViewModel(viewModel)
// if you like to expose some value
// subscriber.sendNext(value)
subscriber.sendCompleted() // which makes clicking-event finished
// maybe error occurs
// subscriber.sendError()
return RACDisposable(block: {
})
})
}
}
我想建议您检查 ReactiveSwift 中的 CocoaAction
和 Action
,它们是遗留 ReactiveObjC 的 RACCommand 的替代品.
我正在尝试使用 Reactive Cocoa 检测对 UIElement(如按钮)的点击,这是第一次在 MVVM 架构中使用 RAC。
我在 ViewController 中为我的按钮设置了 rac_command。
addContactBtn.rac_command = viewModel.addContact
我的 ViewModel 执行以下操作:
func init(){
self.addContact = RACCommand() {
(any:AnyObject!) -> RACSignal in
return RACSignal.createSignal({
(subscriber: RACSubscriber!) -> RACDisposable! in
print("creating viewModel")
let viewModel = ContactAddViewModel(services: self.services)
self.services.pushViewModel(viewModel)
return RACDisposable(block: {
})
})
}
}
但是,命令只执行一次,然后当我弹出视图控制器并返回原始状态时按钮处于禁用状态 viewController。如何检测按钮点击任意次数?
显然,您错过了一些东西并且犯了一个简单的错误。
RACCommand
期望信号在单击按钮时 有效 并在单击后 处置 业务-逻辑(如创建 viewModel,然后在上面 中的 pushViewModel)执行。也就是说每个按钮点击事件关联一个信号,不是共享一个唯一的信号,而是有共同的信号内在逻辑。如果信号未完成或出现错误,则响应的点击事件未完成,因此按钮 已禁用 。
以下修改后的代码可能是正确的。
func init(){
self.addContact = RACCommand() {
(any:AnyObject!) -> RACSignal in
return RACSignal.createSignal({
(subscriber: RACSubscriber!) -> RACDisposable! in
print("creating viewModel")
let viewModel = ContactAddViewModel(services: self.services)
self.services.pushViewModel(viewModel)
// if you like to expose some value
// subscriber.sendNext(value)
subscriber.sendCompleted() // which makes clicking-event finished
// maybe error occurs
// subscriber.sendError()
return RACDisposable(block: {
})
})
}
}
我想建议您检查 ReactiveSwift 中的 CocoaAction
和 Action
,它们是遗留 ReactiveObjC 的 RACCommand 的替代品.