반응 형 프로그래밍을 사용하여 Swift에서 최근에 코드 작성이 시작되었습니다. 리 액티브 프로그래밍은 다소 혼란 스럽다. 어쨌든 리 액티브 프로그래밍을 사용하여 확장 및 축소 개념으로 tableview를 구현하고자한다. 내 자신의 방식으로 시도, 정상, 섹션 tableview 및 here 그들은 또한 예제를 제공하기 위해 코드를 작성할 수 있지만 확장 및 축소 tableview 내가 어떤 예제를 찾지 못했습니다. 어느 누구도이를위한 해결책을 제공해 줄 수 있습니까?Swft3 (RxSwift, RxCocoa) - TableView 반응 형 프로그래밍을 사용한 확장 및 축소 개념
0
A
답변
0
나는 "combineLatest"에 익숙하다고 가정합니다. 이 대답은 정말 "깨끗한"가 아니라 어떻게 든 그것을 구현하는 방법의 아이디어를 줄 것이다 : 당신이 알 수없는 경우, 난 단지 내 경우에는이 부분이 있었다
var expansions = [Variable<Bool>].init(repeating: Variable<Bool>(true), count: 2)
:
먼저 배열을 정의 각 섹션을이 사전에 매핑하려면 [Int: Variable<Bool>]
을 사용해야하는 섹션 수입니다. 항목이 Observable.combineLatest
및
expansion(for: _)
을 사용하고있는 tableView 위임에 필터링 지금
func expansion(for section: Int) -> Variable<Bool> {
/* if using [Int: Variable<Bool>]
if expansions[section] == nil {
expansions[section = Variable<Bool>(false)
}*/
return expansions[section]
}
:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
// next line just dequeues a UITableViewHeaderFooterView subclass.
let view = tableView.dequeueReusableHeaderFooter(forSection: section) as ExpandableHeader
view.titleLabel.text = dataSource[section].model.title
view.isExpanded = expansions[section].value // just a variable to update header's UI
view.expandButton.rx.controlEvent(.touchUpInside)
.bind { [weak self, weak view = view] in
guard let strongSelf = self else { return }
strongSelf.expansions[section].value = !strongSelf.expansions[section].value
view?.isExpanded = strongSelf.expansions[section].value // because dataSource will not reload this view itself unless it gets dequeued.
}
.disposed(by: view.disposeBag)
return view
}
공지 사항
I
이제 확장을 얻기위한 방법을 정의 이 구독을와 함께 처리하고 있습니다.이 viewController에서 사용하고있는 것이 아닙니다. view.disposeBag
은 매회 prepareForReuse()
번으로 갱신되며 모든 이전 가입자가 삭제되므로 (이러한 메소드를 사용하지 않으면 메모리 누수가 발생하지 않지만 ViewController가 많은 리소스와 물론 원치 않는 동작을 소비하게됩니다)
표시 할 코드가 있습니까? – user934902