Swift - 使用表格组件(UITableView)实现分组列表
1,样例说明:
(1)列表以分组的形式展示
(1)列表以分组的形式展示
(2)同时还自定义分区的头部和尾部
(3)点击列表项会弹出消息框显示该项信息。
2,效果图:
(3)点击列表项会弹出消息框显示该项信息。
2,效果图:
3,代码如下:(代码已升级至Swift3)
import UIKit class ViewController: UIViewController , UITableViewDelegate, UITableViewDataSource{ var tableView:UITableView? var allnames:Dictionary<Int, [String]>? var adHeaders:[String]? override func loadView() { super.loadView() } override func viewDidLoad() { super.viewDidLoad() //初始化数据,这一次数据,我们放在属性列表文件里 self.allnames = [ 0:[String]([ "UILabel 标签", "UITextField 文本框", "UIButton 按钮"]), 1:[String]([ "UIDatePiker 日期选择器", "UIToolbar 工具条", "UITableView 表格视图"]) ]; print(self.allnames) self.adHeaders = [ "常见 UIKit 控件", "高级 UIKit 控件" ] //创建表视图 self.tableView = UITableView(frame:self.view.frame, style:.grouped) self.tableView!.delegate = self self.tableView!.dataSource = self //创建一个重用的单元格 self.tableView!.register(UITableViewCell.self, forCellReuseIdentifier: "SwiftCell") self.view.addSubview(self.tableView!) //创建表头标签 let headerLabel = UILabel(frame: CGRect(x:0, y:0, width:self.view.bounds.size.width, height:30)) headerLabel.backgroundColor = UIColor.black headerLabel.textColor = UIColor.white headerLabel.numberOfLines = 0 headerLabel.lineBreakMode = .byWordWrapping headerLabel.text = "高级 UIKit 控件" headerLabel.font = UIFont.italicSystemFont(ofSize: 20) self.tableView!.tableHeaderView = headerLabel } //在本例中,有2个分区 func numberOfSections(in tableView: UITableView) -> Int { return 2; } //返回表格行数(也就是返回控件数) func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { let data = self.allnames?[section] return data!.count } // UITableViewDataSource协议中的方法,该方法的返回值决定指定分区的头部 func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return self.adHeaders?[section] } // UITableViewDataSource协议中的方法,该方法的返回值决定指定分区的尾部 func tableView(_ tableView:UITableView, titleForFooterInSection section:Int)->String? { let data = self.allnames?[section] return "有\(data!.count)个控件" } //创建各单元显示内容(创建参数indexPath指定的单元) func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { //为了提供表格显示性能,已创建完成的单元需重复使用 let identify:String = "SwiftCell" //同一形式的单元格重复使用,在声明时已注册 let cell = tableView.dequeueReusableCell( withIdentifier: identify, for: indexPath) cell.accessoryType = .disclosureIndicator let secno = indexPath.section var data = self.allnames?[secno] cell.textLabel?.text = data![indexPath.row] return cell } // UITableViewDelegate 方法,处理列表项的选中事件 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { self.tableView!.deselectRow(at: indexPath, animated: true) let itemString = self.allnames![indexPath.section]![indexPath.row] let alertController = UIAlertController(title: "提示!", message: "你选中了【\(itemString)】", preferredStyle: .alert) let cancelAction = UIAlertAction(title: "确定", style: .cancel, handler: nil) alertController.addAction(cancelAction) self.present(alertController, animated: true, completion: nil) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
要在每行中添加输入框应该怎么写啊?大神...
航哥,请教一个问题,我想设置分区的间隔高度怎么弄?刚接触swift不熟悉新语言,还有我设置cell里的字体大小或颜色呢?这个怎么设置啊
航哥 我要在里面加载图片什么的 怎么弄呢??就是在单元格里面加载图片
航哥你好,小白求救,分区的头部的字号要怎么设置呢?
航哥大大,表格上端挡住了运营商&电池栏,不想挡住该怎么改呀?
let cell = tableView.dequeueReusableCellWithIdentifier(cellID, forIndexPath: indexPath) as UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier(cellID)
这两个有什么区别,怎么感觉Swift 在有些地方 比OC 更不人性化
航哥,我刚学swift,准确的说是第三天,我发现swift的代码中有老是出现?,!,这两个符号表示什么意思呀,我什么时候应该用呢,特别是UITableView这里
版主你好!在你这里学到很多!感谢!
现在有个问题想请教。
您上面的例子,是通过cell.textLabel?.text = data![indexPath.row]实现每组显示内容的不同。
我想实现这样一个列表:
1、分成三组
2、每组格式都不相同。(比如第一组只显示一个textField,第二组只显示一张图片,第三组只显示一个btn)
请问版主,我改用哪个方法实现我的需求列表!谢谢!