一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - UITableView 實現汽車品牌(demo)

UITableView 實現汽車品牌(demo)

2020-12-22 16:25apecoder IOS

UITableView堪稱UIKit里面最復雜的一個控件了,使用起來不算難,但是要用好并不容易,當使用的時候我們必須要考慮到后臺數據的設計,tableViewCell的設計和重用以及tableView的效率等問題,下面小編通過UITableView 實現汽車品牌,需要的

看tableview的資料其實已經蠻久了,一直想寫點兒東西,卻總是因為各種原因拖延,今天晚上有時間靜下心來記錄一些最近學習的tableview的知識。下面進入正題,uitableview堪稱uikit里面最復雜的一個控件了,使用起來不算難,但是要用好并不容易。當使用的時候我們必須要考慮到后臺數據的設計,tableviewcell的設計和重用以及tableview的效率等問題。

上次介紹的uitableview,這里再做一個uitableview的小程序,汽車品牌,截圖如下:

UITableView 實現汽車品牌(demo)

1.1創建項目,這里不多講。

1.2 把所有汽車品牌的圖片放到images.xcassets中,如下圖:

UITableView 實現汽車品牌(demo)

1.3創建 plist數據,plist數據里面每個array為一個汽車品牌分組,每個array里面又有一個array,這里面存放每個分組下所有的品牌汽車數據,數據如下圖。

UITableView 實現汽車品牌(demo)

1.4數據創建完之后,然后設計頁面,頁面很簡單,直接放一個uitable view就可以了。

2.1后臺代碼,第一步導入

?
1
<uitableviewdatasource,uitableviewdelegate,uialertviewdelegate>

只有導入這uitable view的這幾個代理,我們才能在后面的代碼中使用uitable view的一些相對應的方法。

2.2 創建uitable view控件的屬性,和創建一個存儲數據的數組,如下。

 

?
1
2
@property (weak, nonatomic) iboutlet uitableview *tableview;
@property(nonatomic,strong)nsarray *cargroups;

2.3 加載數據,這邊先要創建兩個模型類來保存數據,國為我們這里的數據都在本地的plist文化中,所以我們要把這個plist里面的數據讀取出來保存在

創建的cargroups數組中,而本地的plist文件是一個array類型,而每個array里面又有一個array數組,所以我們要創建兩個模型類來保存數據,一個模型類保存外面的array數據,一個模型類來保存array里面的子array數據,然后在模型類里面創建和plist里面對應的數據的屬性和方法 

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#import <foundation/foundation.h>
@interface zkcarmodel : nsobject
//頭像
@property(nonatomic,copy)nsstring * icon;
//名字
@property(nonatomic,copy)nsstring *name;
+(instancetype)carwithdict:(nsdictionary *)dic;
-(instancetype)initwithdict:(nsdictionary *)dic;
@end
 
#import "zkcarmodel.h"
@implementation zkcarmodel
-(instancetype)initwithdict:(nsdictionary *)dic
{
 if(self=[super init])
 {
 [self setvaluesforkeyswithdictionary:dic];
 }
 return self;
}
+(instancetype)carwithdict:(nsdictionary *)dic
{
 return [[self alloc] initwithdict:dic];
}
@end
#import <foundation/foundation.h>
#import "zkcarmodel.h"
@interface zkcargroupmodel : nsobject
//題目
@property(nonatomic,copy)nsstring *title;
@property(nonatomic,strong)nsarray *cars;
+(instancetype)cargroupwithdic:(nsdictionary *)dic;
-(instancetype)initwithdict:(nsdictionary *)dic;
@end
 
#import "zkcargroupmodel.h"
@implementation zkcargroupmodel
-(instancetype)initwithdict:(nsdictionary *)dic
{
 if(self=[super init])
 {
 self.title=dic[@"title"];
 nsmutablearray *array=[nsmutablearray array];
 for (nsdictionary *dict in dic[@"cars"]) {
 zkcarmodel *car=[zkcarmodel carwithdict:dict];
 [array addobject:car];
 }
 self.cars=array;
 }
 return self;
}
+(instancetype)cargroupwithdic:(nsdictionary *)dic
{
 return [[self alloc] initwithdict:dic];
}
@end

2.4,對應數據的模型類創建好以后,開始創建數組懶加載

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#import <foundation/foundation.h>
@interface zkcarmodel : nsobject
//頭像
@property(nonatomic,copy)nsstring * icon;
//名字
@property(nonatomic,copy)nsstring *name;
+(instancetype)carwithdict:(nsdictionary *)dic;
-(instancetype)initwithdict:(nsdictionary *)dic;
@end
 
#import "zkcarmodel.h"
@implementation zkcarmodel
-(instancetype)initwithdict:(nsdictionary *)dic
{
 if(self=[super init])
 {
 [self setvaluesforkeyswithdictionary:dic];
 }
 return self;
}
+(instancetype)carwithdict:(nsdictionary *)dic
{
 return [[self alloc] initwithdict:dic];
}
@end
#import <foundation/foundation.h>
#import "zkcarmodel.h"
@interface zkcargroupmodel : nsobject
//題目
@property(nonatomic,copy)nsstring *title;
@property(nonatomic,strong)nsarray *cars;
+(instancetype)cargroupwithdic:(nsdictionary *)dic;
-(instancetype)initwithdict:(nsdictionary *)dic;
@end
 
#import "zkcargroupmodel.h"
@implementation zkcargroupmodel
-(instancetype)initwithdict:(nsdictionary *)dic
{
 if(self=[super init])
 {
 self.title=dic[@"title"];
 nsmutablearray *array=[nsmutablearray array];
 for (nsdictionary *dict in dic[@"cars"]) {
 zkcarmodel *car=[zkcarmodel carwithdict:dict];
 [array addobject:car];
 }
 self.cars=array;
 }
 return self;
}
+(instancetype)cargroupwithdic:(nsdictionary *)dic
{
 return [[self alloc] initwithdict:dic];
}
@end

2.5,數據加載完以后,然后就要開始寫uitable view中相對應的代理方法了

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//設置分區
-(nsinteger)numberofsectionsintableview:(uitableview *)tableview
{
 return self.cargroups.count;
}
//設置每個分區顯示多少行數據
-(nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)section
{
 zkcargroupmodel *model=self.cargroups[section];
 return model.cars.count;
}
//每行顯示的數據
-(uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath
{
 static nsstring *id=@"a";
 //從緩存中讀取cell
 uitableviewcell *cell=[tableview dequeuereusablecellwithidentifier:id];
 //如果緩存中沒有cell,創建一個新的cell
 if(cell==nil){
 cell=[[uitableviewcell alloc] initwithstyle:uitableviewcellstylesubtitle reuseidentifier:id];
 }
 //找到當前分區的索引
 zkcargroupmodel *groupmodel=self.cargroups[indexpath.section];
 //找到當前分區的行
 zkcarmodel *carmodel=groupmodel.cars[indexpath.row];
 //設置cell顯示的文字
 cell.textlabel.text=carmodel.name;
 //設置cell顯示的圖片
 cell.imageview.image=[uiimage imagenamed:carmodel.icon];
 return cell;
}

上面3個代理方法是uitable view中最常用的3個方法。寫完這3個方法運行xcode就可以看到數據了。

但這里還有些小問題,這里顯示的所有品牌都是從上往下排的,沒有一個分組,這樣我們想找哪個品牌的汽車并不太好找,所以,我們要把同一個數據的汽車品牌加一個字母表示,這怎么做呢,這就要給uitable view的每個分區加一個頭了,使用titleforheaderinsection代理方法

代碼如下:

?
1
2
3
4
5
6
7
8
9
//設置頭樣式
-(nsstring *)tableview:(uitableview *)tableview titleforheaderinsection:(nsinteger)section
{
 //找到當前分區在數組中的索引
 zkcargroupmodel *model=self.cargroups[section];
 
 //返回當前分區的數據中的title
 return model.title;
}

2.6上面的程序中,在屏幕的最右邊還有一個索引,點這個索引就找找到相對應的分區數據,其實這個也很簡單,也是調用一個

sectionindextitlesfortableview的代理方法,這個方法返回一個array的數組。

代碼如下:

?
1
2
3
4
5
//設置索引
-(nsarray *)sectionindextitlesfortableview:(uitableview *)tableview
{
 return [self.cargroups valueforkeypath:@"title"];
}

2.7,這個程序中還做了一個當你點擊屏幕上每個汽車品牌的時候還會彈出一個對話框,為什么要做這個呢,因為很多時候屏幕上的圖片和文字都是可以點擊的,所以光做一個靜態顯示好不是很好,雖然這個對話框好像并沒有什么用,但這里只是講下這個方法的使用

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
//點擊cell時變化
-(void)tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath *)indexpath
{
 //創建對話框
 uialertview *alertview=[[uialertview alloc] initwithtitle:@"汽車" message:@"取消" delegate:self cancelbuttontitle:@"確認" otherbuttontitles:@"取消", nil];
 //設置樣式
 alertview.tag=1;
 alertview.alertviewstyle=uitableviewcellstylesubtitle;
 //[alertview ];
 
 [alertview show];
}

3.1 一個uitableview做的汽車品牌就這樣ok了,雖然這并不是一個app但,這里已經把uitableview的一些常用代理方法都寫到了,當然uitableview還有很多代表方法,這里并沒有講,但會了這些以后,在以后的使用中我們可以再來查詢,重要的是思想。

以上是uitableview 實現汽車品牌的全部內容,希望對大家有所幫助。

延伸 · 閱讀

精彩推薦
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5272021-01-16
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111302021-03-15
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
主站蜘蛛池模板: 日本黄色高清视频网站 | 日韩欧美成末人一区二区三区 | 亚洲AV永久无码精品老司机蜜桃 | 草草视频在线观看最新 | 国产99热99 | 国产成人性色视频 | 精品卡1卡2卡三卡免费网站 | 无人知晓小说姜璟免费阅读 | 亚洲网红精品大秀在线观看 | 深夜在线影院 | 精品湿 | 高清视频一区二区三区 | 西施打开双腿下面好紧 | 千金在线观看 | 色综合久久中文字幕网 | 欧美一区二区三区成人看不卡 | 色久天| 国产成人精品曰本亚洲78 | 暖暖暖免费观看在线观看 | 国产精品女同久久免费观看 | 99久久精品免费看国产四区 | 亚洲国产成人久久综合一 | 黑人艹逼 | 日本在线色 | 四虎4hu新地址入口 四虎1515h永久 | 久久91精品国产91 | 奇米视频7777 | 国产hd老太婆 | 欧美精品日韩 | 香蕉久久久久久狠狠色 | 四虎网址大全 | 热99在线观看 | s8sp加密路线和免费路线首页 | www四虎影院 | 日本漫画被黄漫免费动 | 国产欧美日韩一区二区三区在线 | 无码区国产区在线播放 | 男人狂躁女人下半身 | 白丝校花被扒开双腿喷水小说 | 久久久久国产一级毛片高清片 | 婷婷伊人综合亚洲综合网 |