I want to convert the below code into RxSwift. And also please help me how to write button Action code in RxSwift.
ReactiveCocoa or RxSwift Which one is better to use in swift3?
func tableView(_ tableView: UITableView, numberOfRowsInSection section:
Int) -> Int {
return posts.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath:
IndexPath) -> UITableViewCell {
let cell: BTSTableViewCell = self.tableView.dequeueReusableCell(withIdentifier: "BTSTableViewCellIdentifier")! as! BTSTableViewCell
cell.configureWithPost(posts[indexPath.row])
cell.delegate = self
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
// 259.5+ labelHeight+ bigImageHeight
let postViewModel = posts[indexPath.row]
//caption height
var captionHeight = postViewModel.textDetail?.height(withConstrainedWidth: tableView.bounds.size.width - 20, font: UIFont.systemFont(ofSize: 17))
captionHeight = ceil(captionHeight!)
var finalCaptionHeight: CGFloat = 0.0;
if postViewModel.showDetailedCaption {
finalCaptionHeight = captionHeight!
}
else {
finalCaptionHeight = min(41, captionHeight!)
}
return 259.5 +
postViewModel.getBigImageHeightFor(tableView.bounds.size.width) +
finalCaptionHeight
}
Other answers are outdated. Here's Swift 4/5 version with RxSwift in 2019.
Firstly set up delegate, typically in viewDidLoad:
tableView
.rx.setDelegate(self)
.disposed(by: disposeBag)
Then of course, write your delegate method(s) somewhere:
extension HostListViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 64
}
}
If you're binding data to a tableView with RxSwift and want to control row/section height, set your UITableViewDelegate like this:
tableView.rx.setDelegate(self).disposed(by: disposeBag)
and now your func tableView(UITableView, heightForRowAt: IndexPath) -> CGFloat will get called.
For tableview in RxSwift, take look at : https://github.com/devxoul/help-me-rx-tableview-cell-height/blob/master/SimpleTableViewController/SimpleTableViewController.swift
for the button action check sample code below
button.rx.tap
.bind { [weak self] in
//YOUR TAP ACTION CODE LOGIC GOES HERE
}
.disposed(by: disposeBag)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With