因為傾向於純代碼編碼,所以不太喜歡可視化編程,不過也略有研究,所以項目里面的所有界面效果,全部都是純代碼編寫!
終於到了重中之重的tableview的學習了,自我學習ios編程以來,工作中用得最多的就她了,所以不管是以前學習和現在學習,我都把對tableview的學習放在重點!
閑話少敘,代碼如下:
一、先談自定義cell,以及自定義cell上控件的自定義
cell是直接用xib拖拽的,很方便有木有
import UIKit class MyCell: UITableViewCell { override func awakeFromNib() { super.awakeFromNib() // Initialization code } @IBOutlet weak var headerImg: UIImageView! @IBOutlet weak var fileLab: UILabel! override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state } }
二、在控制器里面的調用
1)聲明及初始化
class SeventViewController: UIViewController,UITableViewDelegate,UITableViewDataSource var myTableView:UITableView? var imgAry = [String]() var fileAry = [String]()
func creatTableView() { self.myTableView = UITableView(frame:self.view.frame,style:.plain) self.myTableView?.delegate = self self.myTableView?.dataSource = self self.myTableView?.tableFooterView = UIView() self.myTableView?.register(UINib.init(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "MyCell") self.myTableView?.rowHeight = 50 self.view.addSubview(self.myTableView!) }
2)添加了一個表頭,具體如下
//創建一個表頭標簽 let headerLab = UILabel() headerLab.frame = CGRectMake(0, 0, SCREEN_WIDTH, 20) headerLab.backgroundColor = UIColor.orangeColor() headerLab.textColor = UIColor.whiteColor() headerLab.numberOfLines = 0 headerLab.lineBreakMode = NSLineBreakMode.ByWordWrapping //換行方式 headerLab.text = "常見 UIKIT 控件" headerLab.font = UIFont.systemFontOfSize(20) self.tableView.tableHeaderView = headerLab
3)創建內容數組
self.imgAry = ["1.jpeg","1.jpeg","1.jpeg","1.jpeg","1.jpeg","1.jpeg",]
4)代理方法的實現
有2個代理方法是必須實現的
(1)返回行數
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.imgAry.count }
(2)cell的初始化
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell:MyCell = tableView.dequeueReusableCell(withIdentifier: "MyCell") as! MyCell cell.headerImg.image = UIImage(named:self.imgAry[indexPath.row]) cell.fileLab.text = "\(indexPath.row)" return cell }
(3)cell的點擊方法
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { switch indexPath.row { case 0: self.creatAlertView(title: "", msg: "\(indexPath.row)") break case 1: self.creatAlertView(title: "", msg: "\(indexPath.row)") break case 2: self.creatAlertView(title: "", msg: "\(indexPath.row)") break case 3: self.creatAlertView(title: "", msg: "\(indexPath.row)") break case 4: self.creatAlertView(title: "", msg: "\(indexPath.row)") break case 5: self.creatAlertView(title: "", msg: "\(indexPath.row)") break default: break } } func creatAlertView(title:String,msg:String){ let hAlertView = UIAlertController(title:"溫馨提示",message:"你點擊了\(msg)",preferredStyle:.alert) let cancelAction = UIAlertAction(title:"取消",style:.cancel,handler:nil) let okAction = UIAlertAction(title:"好的",style:.default) hAlertView.addAction(cancelAction) hAlertView.addAction(okAction) self.present(hAlertView, animated: true, completion: nil) }
最終效果如下:
注:當然了,還有很多其他的方法,如果用到了,可以自己看一下!
三、在這里為tableview做一個分組,代碼如下
1)聲明
self.imgAry1 = ["2.jpeg","2.jpeg","2.jpeg","2.jpeg","2.jpeg","2.jpeg",]
2)添加並修改相關代理方法
func numberOfSections(in tableView: UITableView) -> Int { return 2 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if section == 0 { return self.imgAry.count } return self.imgAry1.count } func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { var header = NSArray() header = ["第一區","第二區"] return header[section] as? String } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell:MyCell = tableView.dequeueReusableCell(withIdentifier: "MyCell") as! MyCell if indexPath.section == 0 { cell.headerImg.image = UIImage(named:self.imgAry[indexPath.row]) cell.fileLab.text = "\(indexPath.section+indexPath.row)" }else { cell.headerImg.image = UIImage(named:self.imgAry1[indexPath.row]) cell.fileLab.text = "\(indexPath.section+indexPath.row)" } return cell }
這樣的話,一個簡單的分組就完成了,不過tableview博大精深,還得繼續鑽研啊!
效果圖如下: