在iOS的开发过程中,tableView的使用永远都是最常用的控件。今天学习了一下tableViewCell的操作。代码并不是很复杂,如果有OC开发经验的人,应该很容易看懂的。
class ViewController: UIViewController ,UITableViewDelegate, UITableViewDataSource
{
// 因为Swift中要求变量或常量在声明时就要初始化其值,所以我们在实际开发中,声明变量或常量时使用可选类型。后面代码中使用到以上变量时需要加 ! 对其解包。
var tableView : UITableView?
// var items :NSMutableArray?
// 例如可以不用可选,
var items :NSMutableArray = []
var leftBtn:UIButton?
override func viewDidLoad() {
super.viewDidLoad()
self.items = NSMutableArray()
// 初始化tableView
setupViews()
// 右边添加按钮
setupRightBarButtonItem()
// 左边删除按钮
setupLeftBarButtonItem();
}
func setupViews()
{
self.tableView = UITableView(frame:self.view!.frame)
self.tableView!.delegate = self
self.tableView!.dataSource = self
self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
self.view.addSubview(self.tableView!)
}
func setupLeftBarButtonItem()
{
self.leftBtn = UIButton(type: UIButtonType.Custom)
self.leftBtn!.frame = CGRectMake(0,0,50,40)
self.leftBtn!.setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
self.leftBtn!.setTitle("Edit", forState: UIControlState.Normal)
self.leftBtn!.tag = 100
self.leftBtn!.userInteractionEnabled = false
self.leftBtn!.addTarget(self, action: "leftBarButtonItemClicked", forControlEvents: UIControlEvents.TouchUpInside)
let barButtonItem = UIBarButtonItem(customView: self.leftBtn!)
self.navigationItem.leftBarButtonItem = barButtonItem
}
func setupRightBarButtonItem()
{
let barButtonItem = UIBarButtonItem(title: "Add", style: UIBarButtonItemStyle.Plain, target: self, action: "rightBarButtonItemClicked")
self.navigationItem.rightBarButtonItem = barButtonItem
}
func rightBarButtonItemClicked()
{
let row = self.items.count
let indexPath = NSIndexPath(forRow:row,inSection:0)
self.items.addObject("1")
self.tableView?.insertRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Left)
self.leftBtn!.userInteractionEnabled = true
}
func leftBarButtonItemClicked()
{
if (self.leftBtn!.tag == 100)
{
// 设置当前tableView可编辑
self.tableView?.setEditing(true, animated: true)
self.leftBtn!.tag = 200
self.leftBtn?.setTitle("Done", forState: UIControlState.Normal)
}
else
{
self.tableView?.setEditing(false, animated: true)
self.leftBtn!.tag = 100
self.leftBtn?.setTitle("Edit", forState: UIControlState.Normal)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return self.items.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView .dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
cell.textLabel!.text = String(format: "%i", indexPath.row+1)
return cell
}
// 指定可编辑的行
func tableView(tableView: UITableView, setEditing indexPath: NSIndexPath) -> Bool
{
return true
}
// 编辑完成
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
{
self.items.removeObjectAtIndex(indexPath.row)
self.tableView?.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)
if (self.items.count == 0)
{
self.leftBtn!.userInteractionEnabled = false
}
}
// 编辑样式
func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle
{
return (UITableViewCellEditingStyle.Delete)
}
// 指定哪些行可以移动
func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool
{
return true
}
// 移动完成
func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath)
{
self.tableView?.moveRowAtIndexPath(sourceIndexPath, toIndexPath: destinationIndexPath)
self.items.exchangeObjectAtIndex(sourceIndexPath.row, withObjectAtIndex: destinationIndexPath.row)
}
// 限制在同一分区移动
func tableView(tableView: UITableView, targetIndexPathForMoveFromRowAtIndexPath sourceIndexPath: NSIndexPath, toProposedIndexPath proposedDestinationIndexPath: NSIndexPath) -> NSIndexPath {
if sourceIndexPath.section == proposedDestinationIndexPath.section {
return proposedDestinationIndexPath
}
return sourceIndexPath
}
// 点击cell
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
print("row = %d",indexPath.row)
}
}
原文:http://www.cnblogs.com/wangxianggudu/p/5107733.html