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 }

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。