本文讲的是TableView基础,如何填充数据。
专业完整版请参考(www.appcoda.com/learnswift/)
上面网址的教程文档为试用版,需要购买。(支持正版从我做起💪)
各位看官注意啦,本文章不是教程,只是我的一个分享而已,有错误还请指出。
先上效果图
接下来我们开始!
注意本文是基于iOS 12和Xcode 10
删除原有框架,使用列表框架
如何创建的项目步骤就略过了,使用是单视图。
我们要做的在Main.storyboard删除原有的视图控制器,替换为我们想要的列表控制器(在Library)
下图为更改前和更改后
细心的人可能看到了 在右边我的故事版(姑且叫故事版 具体名字我也忘了)里原来的ViewConntroller文件变成了RestaurantViewConntroller文件。
原因是因为原来的文件是继承与被我们删除的视图控制器,所以它也要被我们删除,重新建立一个新的文件继承于我们现在的列表控制器。
建立步骤如下图
最后修改我们列表视图中的Class,为我们新建的文件,也就是让他们两者关联。
添加数据在列表中
第一步 我们要做的是修改列表的布局,这里就随个人爱好修改,没有强制规定😂。
以上是我的界面,顺手把cell标识符也修改了,之后我们会用到。
在右边的Attributs 中的有个Identlfler修改
第二步 我们要把相册和数据都填充到我们图片框和标签框里
在我们之前新建的文件里找到以下函数
- override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
这个函数的作用就是修改我们列表行中的内容。
接下来我们要做的是建立四个数组,分别用来存放图片,名字,地点,餐馆类型。
这里我们要注意的是,如果你要添加图片无论一张还是几张,图片数组中要填充你图片的名称。并且把图片放到右边故事版的Assets.xcassets中。
接着我们就可以敲代码啦,目光转移tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)这个函数上。
首先我们要让代码知道我们是那个列表,所以我们之前设置的标识符就派上用场了。
我之前设置了标识符为datacell,所以我要定义一个常量A存放我的标识符,之后我们在定义一个常量B来管理我们的列表,最后在用常量B来使各个标签栏中显示我们数组中的内容。
好! 思路完成。 接下来就是代码啦,下面将贴出代码,如果觉得自己能力,可以自己先完成。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = "datacell"
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath)
// Configure the cell...
cell.textLabel?.text = restaurantNames[indexPath.row]
cell.imageView?.image = UIImage(named: restaurantImages[indexPath.row])
return cell
}
除此之外,我们还要修改两个函数并修改至下图
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return restaurantNames.count
第一个函数的作用是告诉这个列表视图(table view)我们只有一个列表(此函数这里也可以注释,因为此函数默认返回的是 1)
第二个函数的作用是为了返回数组中的个数
这时候你就可以使用模拟器看下样子了,结果可能你会很失望,打开App会是一片漆黑。
为什么会是这样呢?原因在于我们故事版中的主要存储版中(Main.storedboard),我们之前删除了默认的,新建了一个列表控制器。
但并没有把它设置为初始的视图控制器,如图设置。
这是我们再打开模拟器看看会发生什么事。
如果你只是想填充数据的话,到这里就已经结束了,我们已经成功添加了图片和名字。
但是这样子并不完美,我们还要继续对它进行加工,让名字显示到标签栏上还要显示地点和类型。
加工App
先新建一个文件,步骤就不用多说了吧,唯一的区别是Subclass of 改为UITableViewCell。
打开新建的文件,输入以下内容,也就是相应的与其他四个对应。
@IBOutlet var nameLable: UILabel!
@IBOutlet var LocationLable: UILabel!
@IBOutlet var TypeLable: UILabel!
@IBOutlet var ImageView: UIImageView!
在主要故事版中,右击cell(我们这里已经命名为datacell),拖拽定义的变量到相应的地方。
我们返回RestaurantUITableViewController的文件来更新我们的代码。
由于在之前文件已经定义四个新的常量来对应四个地方,我们想要用到这个四个常量就需要是我们cell 跟这个文件相关联。
修改代码至如下
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! RestaurantTableViewCell
接下来就可以愉快把数组中的内容放到对应的地方了!
cell.nameLabel.text = restaurantNames[indexPath.row]
cell.thumbnailImageView.image = UIImage(named: restaurantImages[indexPath.row])
cell.locationLabel.text = restaurantLocations[indexPath.row]
cell.typeLabel.text = restaurantTypes[indexPath.row]
再次打开模拟器,出现下图效果达成。
至此我们目的达成! 本文完结!
如果出现界面排版混乱,可以给图片大小固定成某一个值,并且把内容模版改成Scale to Fill
还有很多内容值得大家探讨,比如修改图片的形状等。
以后会持续缓慢的更新,毕竟本人也是还在学习的小白。