iOS开发——UI篇Swift篇&玩转UItableView(二)高级功能
UItableView高级功能
1 class UITableViewControllerAF: UIViewController, UITableViewDataSource, UITableViewDelegate { 2 3 var titleString:String! 4 5 @IBOutlet var titleLabel:UILabel! 6 @IBOutlet var listTableView : UITableView! 7 @IBOutlet var editDoneButton : UIButton! 8 9 10 //定义数组 11 var items:[String] = ["北京", 12 "上海", 13 "天津", 14 "山东", 15 "河北", 16 "湖北"] 17 18 19 //返回按钮事件 20 @IBAction func backButtonClick() 21 { 22 self.navigationController?.popViewControllerAnimated(true) 23 } 24 25 //编辑按钮事件 26 @IBAction func editButtonClick() 27 { 28 if editDoneButton.titleForState(UIControlState.Normal) == "编辑" 29 { 30 //如果按钮标题是编辑,则将表视图设置成可编辑状态,并修改button标题为“完成” 31 listTableView.setEditing(true, animated: true) 32 editDoneButton.setTitle("完成", forState: UIControlState.Normal) 33 }else 34 { 35 //如果按钮标题是完成,则设置成不可编辑,并修改button标题为“编辑” 36 listTableView.setEditing(false, animated: true) 37 editDoneButton.setTitle("编辑", forState: UIControlState.Normal) 38 } 39 } 40 41 //自定义添加按钮事件 42 @IBAction func addButtonClick() 43 { 44 //数组添加新数据 45 items.insert("新城市", atIndex: 0) 46 47 //初始化一个NSIndexPath对象,指定要添加的单元格位置 48 let indexPath = NSIndexPath(forRow: 0, inSection: 0) 49 50 //在指定位置上添加一个新的单元格 51 self.listTableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic) 52 } 53 54 55 56 57 override func viewDidLoad() { 58 super.viewDidLoad() 59 60 titleLabel.text = titleString 61 62 // Do any additional setup after loading the view. 63 } 64 65 override func didReceiveMemoryWarning() { 66 super.didReceiveMemoryWarning() 67 // Dispose of any resources that can be recreated. 68 } 69 70 71 /* 72 // MARK: - Navigation 73 74 // In a storyboard-based application, you will often want to do a little preparation before navigation 75 override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 76 // Get the new view controller using segue.destinationViewController. 77 // Pass the selected object to the new view controller. 78 } 79 */ 80 81 82 //MARK: - UITableViewDelegate 83 84 //tableView数据源:返回几节(组) 85 func numberOfSectionsInTableView(tableView: UITableView) -> Int 86 { 87 return 1 88 } 89 //tableView数据源:返回每一节行数 90 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 91 { 92 return items.count //返回数组数量 93 } 94 95 //行缩进 96 func tableView(tableView: UITableView, indentationLevelForRowAtIndexPath indexPath: NSIndexPath) -> Int 97 { 98 return indexPath.row 99 } 100 101 //tableView 数据源:每一行高度 102 func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 103 { 104 return 50 105 } 106 107 //tableView数据源:每一行内容 108 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 109 { 110 //Cell标示符,代表一系列 111 // OC:使用static, swift:使用let 112 let cellIdentifier: String = "cellIdentifier" 113 114 //通过cellIdentifier标示符取没有使用的Cell 115 //有可能不存在,所以使用:optional 116 var cell: UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as? UITableViewCell 117 118 //如果cell取到是空 119 if cell == nil { // no value 120 121 //创建新的cell 122 //cell样式:UITableViewCellStyle.Default 123 //cell标示符:cellIdentifier 124 cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: cellIdentifier) 125 126 //设置字体 127 // cell!.textLabel.font = UIFont.systemFontOfSize(14) 128 //2015年4月10号修改 129 cell!.textLabel?.font = UIFont.systemFontOfSize(14) 130 131 //设置选中cell样式 132 cell!.selectionStyle = .Gray; 133 134 //设置cell后面箭头样式 135 cell!.accessoryType = .DisclosureIndicator; 136 } 137 138 //去当前行 139 var row=indexPath.row as Int 140 141 //从数组取对应值给cell赋值 142 // cell!.textLabel.text = self.items[row] 143 //2015年4月10号修改 144 cell!.textLabel?.text = self.items[row] 145 146 //设置cell图片 147 // cell!.imageView.image = UIImage(named:"cellImage.png") 148 //2015年4月10号修改 149 cell!.imageView?.image = UIImage(named:"cellImage.png") 150 151 return cell!; 152 } 153 154 155 //确定每一行 是否可以编辑 156 func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool 157 { 158 return true 159 } 160 161 //返回每一行 操作类型 162 func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle 163 { 164 if indexPath.row == items.count-1//最后一行允许插入 165 { 166 return .Insert 167 } 168 169 return .Delete //允许删除操作 170 } 171 172 173 //在编辑状态,可以拖动设置cell位置 174 func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool 175 { 176 return true 177 } 178 179 //编辑cell事件 180 func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 181 { 182 //如果是删除操作 183 if editingStyle == UITableViewCellEditingStyle.Delete 184 { 185 items.removeAtIndex(indexPath.row)//将数据源数组删除对应行数数据 186 187 //table表删除该行 188 tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Left) 189 } 190 //如果是插入一行操作 191 else if editingStyle == UITableViewCellEditingStyle.Insert 192 { 193 //数组添加一条新数据 194 items.append("新城市 \(items.count)") 195 196 //表视图插入一条单元格 197 tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Middle) 198 } 199 } 200 201 202 203 //移动cell事件 204 func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) { 205 if fromIndexPath != toIndexPath{ 206 207 //获取移动行对应的值 208 var itemValue:String = items[fromIndexPath.row] 209 210 //删除移动的行的值 211 items.removeAtIndex(fromIndexPath.row) 212 213 //如果移动区域大于现有行数,直接在最后添加移动的值 214 if toIndexPath.row > items.count{ 215 items.append(itemValue) 216 }else{ //没有超出最大行数,则在目标位置添加刚才删除的值 217 items.insert(itemValue, atIndex: toIndexPath.row) 218 } 219 } 220 } 221 222 //tableView代理:点击一行 223 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 224 { 225 //释放选中效果 226 tableView.deselectRowAtIndexPath(indexPath, animated: true) 227 } 228 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。