Swift 实现UITableView报错, does not conform to protocol 'UITableViewDataSource'

Swift语言中的UITableView中着实很坑爹,为什么呢,因为在遵循协议后经常会报这样的错误:does not conform to protocol 'UITableViewDataSource'。而且是第一次尝试的伙伴们经常会发现,我写的代码没有问题呀,该写的都写了,为什么还是报错呢,有的时候是xcode的问题,有的时候又是自己遵循的协议中有必需实现的方法而没有实现导致的。所以遇到这种问题,大家不妨跳进代理中去看看必须实现的方法都实现的没有。

下面是我写的一个小demo,大家可以看看。

import UIKit


class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{
    
    var dataArray: NSMutableArray?
    var tableView: UITableView?
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Do any additional setup after loading the view, typically from a nib.
        self.view.backgroundColor = UIColor.orangeColor()
        self.navigationItem.title = "您好 Swift"
        
        self.dataArray = NSMutableArray()
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        self.dataArray!.addObject("您好 Swift")
        
        
        NSLog("%@", self.dataArray!)
        
        self.tableView = UITableView(frame: self.view.frame, style:UITableViewStyle.Plain)
        self.tableView!.delegate = self
        self.tableView!.dataSource = self
        self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "MyTestCell")
        self.view.addSubview(self.tableView!)
        
        
    }
 
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
        return self.dataArray!.count
    }
    
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
        let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "MyTestCell")
        
        var string :String = self.dataArray?.objectAtIndex(indexPath.row)as String
        cell.textLabel.text = string
        cell.textLabel.text = string
        
        return cell
    }
    
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
        
        var controller = secondViewController()
        controller.title = "Swift 的自我介绍"
        controller.view.backgroundColor = UIColor(red: 10/255.0, green: 100/255.0, blue: 200/255.0, alpha: 1.0)
        self.navigationController?.pushViewController(controller, animated: true)
    }
    
   
    
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UITableView循环滚动可以通过以下步骤实现: 1. 首先,创建一个UITableView并设置其数据源和代理。 2. 然后,创建一个数组来存储要显示的数据。 3. 实现UITableViewDataSource协议中的方法tableView(_:numberOfRowsInSection:),返回一个比实际数据量多的数值,例如10倍于实际数据量。 4. 实现tableView(_:cellForRowAt:)方法,在该方法中设置cell的内容,需要根据cell的indexPath.row来获取数据,应该将indexPath.row对实际数据量取模,以保证循环滚动。 5. 实现tableView(_:willDisplay:forRowAt:)方法,在该方法中判断当前cell是否为最后一行,如果是,则将tableView的contentOffset设置到第一行的位置,以实现循环滚动。 下面是一个简单的实现代码: ```swift class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet weak var tableView: UITableView! var data = ["A", "B", "C", "D", "E"] override func viewDidLoad() { super.viewDidLoad() tableView.dataSource = self tableView.delegate = self tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return data.count * 10 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) cell.textLabel?.text = data[indexPath.row % data.count] return cell } func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { let lastRowIndex = tableView.numberOfRows(inSection: 0) - 1 if indexPath.row == lastRowIndex { let firstIndexPath = IndexPath(row: 0, section: 0) tableView.scrollToRow(at: firstIndexPath, at: .top, animated: false) } } } ``` 在这个例子中,我们将数据循环滚动10次,即实际数据量为5个,但是显示了50个cell,可以通过手动滑动tableView来验证循环滚动效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值