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 }

 

 

你可能感兴趣的:(UITableView)