gpt4 book ai didi

swift - 根据 TableView 中的项目数使动态 UI 按钮出现和消失

转载 作者:行者123 更新时间:2023-11-28 15:38:44 25 4
gpt4 key购买 nike

我目前正在尝试根据从后端 url 获取的加载到 TableView 中的项目数使动态 UIbutton 出现和消失。如果表格 View 中加载了 12 个或更多项,我希望按钮出现,如果少于 12 个,则不显示。关于处理此问题的最佳方法有什么想法吗?

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 ?? ""
}
}

最佳答案

XFreire 的答案很好,或者你可以这样做:

viewModel.shownProviders
.map { $0.count < 12 }
.bind(to: dontSeeProviderButton.rx.isHidden)
.disposed(by: bag)

确保shownProviders可以处理被订阅而无需重新发送任何网络请求或其他任何东西。您可能需要 shareReplayLatestWhileConnected()为此。

我被要求解释这段代码......我将通过分解它来做到这一点......


let shownProviders = viewModel.shownProviders

此时,我知道 shownProviders是一个数组。我不太了解数组包含的类型,因为该信息不在问题中,但我不需要知道

let shownProviders = viewModel.shownProviders
let shouldHideButton = shownProviders.map { $0.count < 12 }

在上面一行中,我知道 $0是一个数组,我知道如果数组中的项目少于 12 个,按钮应该隐藏。 $0.count < 12返回一个 bool 值。 map将转换 shownProviders可观察到 block 返回的任何内容,所以我知道 shouldHideButton是一个 Observable<Bool> .

let shownProviders = viewModel.shownProviders
let shouldHideButton = shownProviders.map { $0.count < 12 }
let disposable = shouldHideButton.bind(to: dontSeeProviderButton.rx.isHidden)

上面这行代码绑定(bind)了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)

最后一行确保当 View Controller 超出范围时绑定(bind)将被破坏。

关于swift - 根据 TableView 中的项目数使动态 UI 按钮出现和消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43986177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com