swift基础UI之 UITableView


关于swift的协议



在viewController会显示 "Received message"


class ViewController:UIViewController ,UITableViewDelegate,UITableViewDataSource
{
    var tableView :UITableView?
    var items :NSMutableArray?
    var leftBtn:UIButton?
    
    overridefunc viewDidLoad() {
        super.viewDidLoad()
        self.title ="I love Swift"
        self.items =NSMutableArray()
         self.items?.addObject("1")
        self.items?.addObject("2")
        self.items?.addObject("3")
        self.items?.addObject("4")
        self.items?.addObject("5")

        // Do any additional setup after loading the view, typically from a nib.
        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.tableView?.separatorStyle=UITableViewCellSeparatorStyle.SingleLine;
        self.view.addSubview(self.tableView!)
    }
    
    func setupLeftBarButtonItem()
    {
        self.leftBtn =UIButton.init(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: #selector(ViewController.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: #selector(ViewController.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)
        {
            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)
        }
        
    }
    
    
    overridefunc didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    func tableView(tableView:UITableView, numberOfRowsInSection section:Int) -> Int
    {
        returnself.items!.count
    }
    
    func tableView(tableView:UITableView, cellForRowAtIndexPath indexPath:NSIndexPath) -> UITableViewCell
    {
        let cell = tableView .dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) asUITableViewCell
        cell.textLabel!.text =String(format: "%i", indexPath.row+1)
        return cell
    }
    
    func tableView(tableView:UITableView, canEditRowAtIndexPath indexPath:NSIndexPath) -> Bool
    {
        returntrue
    }
    
    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
    {
        returntrue
    }
    
    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, didSelectRowAtIndexPath indexPath:NSIndexPath)
    {
        print("row = %d",indexPath.row)
    }
    
}


运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好,关于 Swift 封装 UITableViewUICollectionView 的问题,我可以给你一些基本的介绍。 首先,UITableViewUICollectionView 都是 iOS 平台中常用的视图控件,用于展示列表和网格等数据。在 Swift 中,我们可以通过继承 UITableViewUICollectionView 类来自定义我们自己的表格和网格视图。 下面是一个简单的示例代码,展示如何封装 UITableView: ```swift import UIKit class MyTableView: UITableView, UITableViewDataSource, UITableViewDelegate { var data: [String] = [] override init(frame: CGRect, style: UITableView.Style) { super.init(frame: frame, style: style) self.dataSource = self self.delegate = self // 注册单元格 self.register(UITableViewCell.self, forCellReuseIdentifier: "cell") } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } // UITableViewDataSource 协议方法 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.data.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) cell.textLabel?.text = self.data[indexPath.row] return cell } // UITableViewDelegate 协议方法 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { print("选中了第 \(indexPath.row) 行") } } ``` 在这个示例代码中,我们自定义了一个名为 `MyTableView` 的类,继承自 `UITableView`。我们在 `init` 方法中设置了数据源和代理,并注册了一个单元格类型。在 `UITableViewDataSource` 和 `UITableViewDelegate` 协议方法中,我们实现了表格的行数、单元格内容和选中事件的处理。 类似地,我们也可以使用类似的方式封装 UICollectionView。需要注意的是,UICollectionViewDelegate 和 UICollectionViewDataSource 两个协议方法和 UITableView 中的函数名和实现方式略有不同,需要根据实际情况来进行调整。 希望这个简单的示例代码可以对你有所帮助。如果你有其他关于 Swift 的问题,欢迎随时提出!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值