我想要实现与以下示例图像相似的功能,在该示例图像中,我想在第一个屏幕上显示一个选定的或默认的类别,然后单击该按钮,它将移动到下一个屏幕,并带有其他类别选项可供选择。
在此示例中,它表示Entertainment
并Project 01
表示不同的数据实体(数据存储区),并且看起来它正在使用UITableView且每个UITableViewCell连接到不同的数据存储区。我首先想知道到目前为止我的分析是否正确。
就我而言,我只需要做那Entertainment
部分,在下一个屏幕中,显示所有类别选项,例如示例中的第二个屏幕。做出选择后,第一个屏幕应反映第二个屏幕的选择。
UITableView是显示此单个字段(单元格)并选择另一个ViewController的正确选择吗?
我看到的所有演示应用程序示例都没有演示用于此目的的UITableView的用法,因此我不确定哪种情况是最好的选择。
是的,UITableView是一个不错的选择。只需在“选择类别”类中创建一个委托方法。在Category类的UITableView的didSelectRowAtIndexPath方法上调用委托。然后将Expense类指定为类别类的委托。
基本上,单击娱乐后,您将执行连续搜索。一旦用户选择表格行,将向用户显示“选择类别控制器”。代表将被呼叫。在费用类中实现该委托。在实现中,只需用新值重新加载表即可。
您选择的类别类别将类似于:
import UIKit
protocol ChooseCategoryControllerDelegate: class {
func categoryController(controller: ChooseCategoryTableViewController, didSelectCategory category: String)
}
class ChooseCategoryTableViewController: UITableViewController {
let categories = ["category1","category2","category3","category4"]
var selectedcategory: String!
weak var delegate: ChooseCategoryControllerDelegate!
// MARK: - Table view data source
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return categories.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("TypeCell", forIndexPath: indexPath)
cell.textLabel?.text = categories[indexPath.row]
return cell
}
// MARK: - Table view delegate
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
selectedcategory = categories[indexPath.row] as? String
delegate.categoryController(self, didSelectCategory: selectedcategory)
}
}
在费用控制器中,在类声明之外添加以下代码:
extension ExpenseController: ChooseCategoryControllerDelegate {
func typesController(controller: ChooseCategoryTableViewController, didSelectCategory category: String) {
let selectedCategory = category
dismissViewControllerAnimated(true, completion: nil)
//update your table category with the new category!!
//reload your table here
}
}
重新更新:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "CategorySegue" {
let controller = segue.destinationViewController as! ChooseCategoryTableViewController
controller.delegate = self
}
}
也将您的segue命名为“ CategorySegue”
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句