Swift:表格视图实现单选

效果展示

前言

最近一个朋友问我,如何实现表格视图的单选?因为我之前用Objective-c写过一次,但那都是很久以前的事情了,于是就想着用swift实现一次,并分享给大家。

实现

下面我们来看看具体的实现方法

首先我们创建一个Swift iOS工程,在AppDelegate.swift的didFinishLaunchingWithOptions 方法中手动初始化UIWindow,并且给根视图控制器添加导航栏,当然在此之前我们需要到Info.plist 文件中将Storyboard加载UIWindow字段的 Main删除

self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.backgroundColor = UIColor.blackColor()
self.window?.rootViewController = UINavigationController(rootViewController: ViewController())
self.window?.makeKeyAndVisible()

下一步,我们需要到ViewController.swift文件中搭建界面,构造表格视图,以及数据源的配置,这里我直接上代码,相信表格视图的使用大家已经非常熟悉了。代码注册的单元格使用的是自定义的单元格,而处理单选的方法主要就是在自定义单元格 CustomTableViewCell 中实现,稍后我会提及,涉及到的素材可到阿里矢量图中下载。

import UIKit

class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {

    var tableView: UITableView?
    var dataSource: [String]?

    override func viewDidLoad() {
        super.viewDidLoad()


        self.initializeDatasource()
        self.initializeUserInterface()

    }

    // MARK:Initialize methods
    func initializeDatasource() {

        self.dataSource = ["中国","美国","法国","德国"]
    }

    func initializeUserInterface() {
        self.title = "单项选择"
        self.automaticallyAdjustsScrollViewInsets = false
        self.view.backgroundColor = UIColor.whiteColor()

        // initialize table view
        self.tableView = {
            let tableView = UITableView(frame: CGRectMake(0,64,CGRectGetWidth(self.view.bounds),CGRectGetHeight(self.view.bounds) - 64),style: UITableViewStyle.Grouped)
            tableView.dataSource = self
            tableView.delegate = self
            tableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine
            tableView.registerClass(CustomTableViewCell.classForCoder(),forCellReuseIdentifier: "cellIdentifier")
            return tableView
            }()
        self.view.addSubview(self.tableView!)
    }

    // MARK:UITableViewDataSource && UITableViewDelegate

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    func tableView(tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
        return (self.dataSource?.count)!
    }

    func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifier",forIndexPath: indexPath) as! CustomTableViewCell

        cell.imageView?.image = UIImage(named: "iconfont-select.png")
        cell.textLabel?.text = self.dataSource![indexPath.row]

        return cell

    }


    func tableView(tableView: UITableView,heightForHeaderInSection section: Int) -> CGFloat {
        return 40
    }

    func tableView(tableView: UITableView,titleForHeaderInSection section: Int) -> String? {
        return "请选择您向往的城市:"
    }

    func tableView(tableView: UITableView,didSelectRowAtIndexPath indexPath: NSIndexPath) {

        // get cell with index path
        let cell = tableView.cellForRowAtIndexPath(indexPath)

        print("您选择的城市:\((cell?.textLabel?.text)!)")
    }

}

接下来我们看看 CustomTableViewCell.swift 文件,在自定义单元格中,要做的操作非常简单,只需在 setSelected 方法中做如下操作即可:

override func setSelected(selected: Bool,animated: Bool) {

        super.setSelected(selected,animated: animated)

        if selected {
            imageView?.image = UIImage(named: "iconfont-selected.png")
        }else {
            imageView?.image = UIImage(named: "iconfont-select.png")
        }
    }
}

好了,表格视图的单选就这样实现了,运行看看吧。

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...