Table 查看 swift iOS 中的问题
Table view issues in swift iOS
我正在尝试创建一个 table 视图,其中包含带有部分的菜肴列表,当我们 select 一行时,它应该转到包含列表的新 table 视图供应特定食物的热门餐厅。
我已经创建了包含部分的 table 视图,但是当我到达列表视图的末尾时我的应用程序崩溃了。我在下面添加了我的代码,其中包含 table 视图和错误的快照。
@IBOutlet weak var dishtable: UITableView!
@IBOutlet weak var namlbl: UILabel!
var Dishes = ["POPULAR Dishes": ["Biryani", "Tandori Chicken","Butter Chicken", "Vada Pav"],"A": ["Aloo baingan", "Aloo ki Tikki", "Amritsari fish"], "B": ["Baigan bharta", "Biryani"]];
override func viewDidLoad() {
super.viewDidLoad()
self.dishtable.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
dishtable.dataSource = self
dishtable.delegate = self
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prefersStatusBarHidden() -> Bool {
return true
}
let sections:Array<AnyObject> = ["POPULAR Dishes","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
var usernames = [String]()
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cellID = "cell"
let cell: UITableViewCell = self.dishtable.dequeueReusableCellWithIdentifier(cellID) as! UITableViewCell
println("value : \(indexPath.section)")
println("value 1: \(indexPath.row)")
cell.textLabel!.text = Dishes[sections[indexPath.section] as! String]![indexPath.row]
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
println("Dishes section count : \(section)")
return Dishes.count
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int{
return 27
}
func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
}
func tableView(tableView: UITableView,
sectionForSectionIndexTitle title: String,
atIndex index: Int) -> Int{
return index
}
func tableView(tableView: UITableView,
titleForHeaderInSection section: Int) -> String?{
return self.sections[section] as? String
}
这是 table 视图的屏幕截图。
这是我向下滚动到 table 视图底部时出现错误的屏幕截图。
这是相同错误的控制台截图。
还请告诉我如何为 table 视图添加搜索功能。
我认为你的问题出在这里:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
println("Dishes section count : \(section)")
return Dishes.count
}
您要返回每个部分的行数,但 Dishes
中没有超过键 B 的菜肴。
通常在 numberOfRowsInSection
委托方法中你会做这样的事情:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
println("Dishes section count : \(section)")
if section == 0 {
return Dishes["POPULAR Dishes"].count
}
else if section == 1 {
return Dishes["A"].count
}
return 0
}
显然您会希望找到更好的方法来执行此操作,但我希望这对您有所帮助。
问题出在 numberOfRowsInSection
函数中。
因为你的情况 numberOfSectionsInTableView
= 27 所以你需要 return 个人 numberOfRowsInSection
.
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
case 0:
return Dishes["POPULAR Dishes"].count
case 1:
return Dishes["A"].count
case 2:
return Dishes["B"].count
// upto case 26
default:
println("fetal error")
}
return 1
}
我正在尝试创建一个 table 视图,其中包含带有部分的菜肴列表,当我们 select 一行时,它应该转到包含列表的新 table 视图供应特定食物的热门餐厅。
我已经创建了包含部分的 table 视图,但是当我到达列表视图的末尾时我的应用程序崩溃了。我在下面添加了我的代码,其中包含 table 视图和错误的快照。
@IBOutlet weak var dishtable: UITableView!
@IBOutlet weak var namlbl: UILabel!
var Dishes = ["POPULAR Dishes": ["Biryani", "Tandori Chicken","Butter Chicken", "Vada Pav"],"A": ["Aloo baingan", "Aloo ki Tikki", "Amritsari fish"], "B": ["Baigan bharta", "Biryani"]];
override func viewDidLoad() {
super.viewDidLoad()
self.dishtable.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
dishtable.dataSource = self
dishtable.delegate = self
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prefersStatusBarHidden() -> Bool {
return true
}
let sections:Array<AnyObject> = ["POPULAR Dishes","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
var usernames = [String]()
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cellID = "cell"
let cell: UITableViewCell = self.dishtable.dequeueReusableCellWithIdentifier(cellID) as! UITableViewCell
println("value : \(indexPath.section)")
println("value 1: \(indexPath.row)")
cell.textLabel!.text = Dishes[sections[indexPath.section] as! String]![indexPath.row]
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
println("Dishes section count : \(section)")
return Dishes.count
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int{
return 27
}
func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
}
func tableView(tableView: UITableView,
sectionForSectionIndexTitle title: String,
atIndex index: Int) -> Int{
return index
}
func tableView(tableView: UITableView,
titleForHeaderInSection section: Int) -> String?{
return self.sections[section] as? String
}
这是 table 视图的屏幕截图。
这是我向下滚动到 table 视图底部时出现错误的屏幕截图。
这是相同错误的控制台截图。
还请告诉我如何为 table 视图添加搜索功能。
我认为你的问题出在这里:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
println("Dishes section count : \(section)")
return Dishes.count
}
您要返回每个部分的行数,但 Dishes
中没有超过键 B 的菜肴。
通常在 numberOfRowsInSection
委托方法中你会做这样的事情:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
println("Dishes section count : \(section)")
if section == 0 {
return Dishes["POPULAR Dishes"].count
}
else if section == 1 {
return Dishes["A"].count
}
return 0
}
显然您会希望找到更好的方法来执行此操作,但我希望这对您有所帮助。
问题出在 numberOfRowsInSection
函数中。
因为你的情况 numberOfSectionsInTableView
= 27 所以你需要 return 个人 numberOfRowsInSection
.
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
case 0:
return Dishes["POPULAR Dishes"].count
case 1:
return Dishes["A"].count
case 2:
return Dishes["B"].count
// upto case 26
default:
println("fetal error")
}
return 1
}