Swift 根据表视图中的项目数显示并取消缩放动态UIbutton
我目前正试图根据从后端url获取的加载到表视图中的项目数,使动态UIbutton出现和消失。如果有12个或更多项目加载到表视图中,我希望按钮显示,如果少于12个,则不显示。有什么好办法处理这个问题吗Swift 根据表视图中的项目数显示并取消缩放动态UIbutton,swift,uibutton,rx-swift,Swift,Uibutton,Rx Swift,我目前正试图根据从后端url获取的加载到表视图中的项目数,使动态UIbutton出现和消失。如果有12个或更多项目加载到表视图中,我希望按钮显示,如果少于12个,则不显示。有什么好办法处理这个问题吗 import UIKit import RxSwift import RxCocoa public class AllProvidersPickerViewController: InputableTableViewController, ViewModelHolder { @IBOut
import UIKit
import RxSwift
import RxCocoa
public class AllProvidersPickerViewController: InputableTableViewController, ViewModelHolder {
@IBOutlet private(set) weak var searchBar: UISearchBar!
@IBOutlet weak var dontSeeProviderButton: UIButton!
var viewModel: AllProvidersPickerViewModel! = nil
private let bag = DisposeBag()
override public func viewDidLoad() {
super.viewDidLoad()
setupRx()
}
private func setupRx() {
viewModel.shownProviders
.bind(to: tableView.rx.items(cellIdentifier: "ProviderCell")) { _, mvpd, cell in
cell.textLabel?.text = mvpd.displayName
}
.addDisposableTo(bag)
tableView
.rx
.modelSelected(MVPD.self)
.bind(to: viewModel.selectedProvider)
.addDisposableTo(bag)
searchBar
.rx.text
.orEmpty
.bind(to: viewModel.searchQuery)
.addDisposableTo(bag)
dontSeeProviderButton
.rx.tap
.bind(to: viewModel.tappedDontSeeProvider)
.addDisposableTo(bag)
}
}
private extension MVPD {
var displayName: String {
return self.names.first ?? ""
}
}
最简单的方法:
viewModel.shownProviders
.subscribe(onNext: { [weak self] items in
if items.count < 12 {
self?.viewAllProvidersButton.isHidden = true
}
else {
self?.viewAllProvidersButton.isHidden = false
}
})
.addDisposableTo(bag)
然后在setupRx()
中:
XFreire的答案很好,或者您可以:
viewModel.shownProviders
.map { $0.count < 12 }
.bind(to: dontSeeProviderButton.rx.isHidden)
.disposed(by: bag)
此时,我知道shownProviders
是一个数组。我不太了解数组包含的类型,因为这些信息不在问题中,但我不需要知道
let shownProviders = viewModel.shownProviders
let shouldHideButton = shownProviders.map { $0.count < 12 }
上面的代码行将shouldHideButton
的结果绑定到按钮的isHidden
属性。它返回一个一次性的
let shownProviders = viewModel.shownProviders
let shouldHideButton = shownProviders.map { $0.count < 12 }
let disposable = shouldHideButton.bind(to: dontSeeProviderButton.rx.isHidden)
disposable.disposed(by: bag)
让shownProviders=viewModel.shownProviders
让shoulHideButton=shownProviders.map{$0.count<12}
let disposable=shouldHideButton.bind(到:dontSeeProviderButton.rx.ishiden)
一次性。处理(通过:袋)
最后一行确保了当视图控制器超出范围时绑定将被破坏。您真是太棒了!那绝对有效!除了我关闭了“viewAllProvidersButton”的“DontSeProviderButton”并将其全部放入setupRx()。非常感谢你的帮助。我是一个新手,仍然掌握着swift和swift rx的窍门。
.subscribe(onNext:{if items.count中的[weak self]items.count<12{self?.viewAllProvidersButton.ishiden=true}否则{self?.viewAllProvidersButton.ishiden=false}).addDisposableTo(袋子)
太好了!我正在更新答案以使用viewAllProvidersButton
。如果答案有帮助,请将其标记为已接受好吗?:)哦,是的!我喜欢:)更优雅!是的!非常感谢你,@Daniel T。!你能用自己的话解释一下这里发生的事情背后的逻辑吗。我仍然在学习RXswift和Swift,所以我想在学习的过程中完全理解一切。
let shownProviders = viewModel.shownProviders
let shownProviders = viewModel.shownProviders
let shouldHideButton = shownProviders.map { $0.count < 12 }
let shownProviders = viewModel.shownProviders
let shouldHideButton = shownProviders.map { $0.count < 12 }
let disposable = shouldHideButton.bind(to: dontSeeProviderButton.rx.isHidden)
let shownProviders = viewModel.shownProviders
let shouldHideButton = shownProviders.map { $0.count < 12 }
let disposable = shouldHideButton.bind(to: dontSeeProviderButton.rx.isHidden)
disposable.disposed(by: bag)