如何创建Rx
Swift风格的TableViewController?
我正在尝试创建一个使用RxSwift的简单TableViewController,并且没有任何部分.
我将代码仅限于一个部分并仅使用用户.然而,似乎我仍然坚持使用SectionModel.
// // TableViewController.swift // RxExample // // Created by carlos on 26/5/15. // copyright (c) 2015 Krunoslav Zaher. All rights reserved. // // modified by Mike Finney for a StackOverflow question import UIKit #if !RX_NO_MODULE import RxSwift import RxCocoa #endif class TableViewController: ViewController,UITableViewDelegate { @IBOutlet weak var tableView: UITableView! var disposeBag = disposeBag() let users = Variable([User]()) let dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String,User>>() typealias Section = SectionModel<String,User> override func viewDidLoad() { super.viewDidLoad() self.navigationItem.rightBarButtonItem = self.editButtonItem() users .map { [ SectionModel(model: "ok",items: $0) ] } .bindTo(tableView.rx_itemsWithDataSource(dataSource)) .adddisposableto(disposeBag) dataSource.cellFactory = { (tv,ip,user: User) in let cell = tv.dequeueReusableCellWithIdentifier("Cell")! cell.textLabel?.text = user.firstName + " " + user.lastName return cell } // customization using delegate // RxTableViewDelegateBridge will forward correct messages tableView.rx_setDelegate(self) .adddisposableto(disposeBag) tableView.rx_itemSelected .subscribeNext { [uNowned self] indexPath in self.showDetailsForUserAtIndexPath(indexPath) } .adddisposableto(disposeBag) tableView.rx_itemDeleted .subscribeNext { [uNowned self] indexPath in self.removeUser(indexPath) } .adddisposableto(disposeBag) RandomUserAPI.sharedAPI.getExampleUserResultSet() .subscribeNext { [uNowned self] array in self.users.value = array } .adddisposableto(disposeBag) } override func setEditing(editing: Bool,animated: Bool) { super.setEditing(editing,animated: animated) tableView.editing = editing } // MARK: Table view delegate ;) func tableView(tableView: UITableView,heightForHeaderInSection section: Int) -> CGFloat { return 0 } // MARK: Navigation private func showDetailsForUserAtIndexPath(indexPath: NSIndexPath) { let sb = UIStoryboard(name: "Main",bundle: NSBundle(identifier: "RxExample-iOS")) let vc = sb.instantiateViewControllerWithIdentifier("DetailViewController") as! DetailViewController vc.user = getUser(indexPath) self.navigationController?.pushViewController(vc,animated: true) } // MARK: Work over Variable func getUser(indexPath: NSIndexPath) -> User { var array: [User] switch indexPath.section { case 0: array = users.value default: fatalError("Section out of range") } return array[indexPath.row] } func moveUserFrom(from: NSIndexPath,to: NSIndexPath) { var user: User var fromArray: [User] var toArray: [User] fromArray = users.value user = fromArray.removeAtIndex(from.row) users.value = fromArray toArray = users.value toArray.insert(user,atIndex: to.row) users.value = toArray } func addUser(user: User) { var array = users.value array.append(user) users.value = array } func removeUser(indexPath: NSIndexPath) { var array: [User] switch indexPath.section { case 0: array = users.value array.removeAtIndex(indexPath.row) users.value = array default: fatalError("Section out of range") } } }
如果我能帮助它,我甚至不想使用SectionModel.
所以也许另一种问题是“RxTableViewSectionedReloadDataSource的非节版本是什么?”
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。