日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

07_UI基础_UITableView实战- 支付宝口碑

發布時間:2024/8/26 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 07_UI基础_UITableView实战- 支付宝口碑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

此篇為針對ios中的UI基礎知識,為了能讓大家更清楚的理解,此整理中編寫了采用知識點+案例的方式,配有非常詳細的截圖和代碼注釋,添加了許多大白話進行解釋,如有錯誤之處,望指正,愿與您相互交流學習,共同進步!---"會飛的猴子_阿新"

本篇案例修改圖為(后面會逐步優化細節問題)

主要內容從支付寶案例開始,重點在后面哦!

使用UITableViewControler控制器實現支付寶口碑案例
UITableViewControler 缺陷: 現階段只適合全屏的..

01-UITableViewController體驗

  • 相當于一個控制器自帶tableView
  • viewController管理的是view
  • tableViewController管理的是tableView
  • 也就是在tableViewController下,self.view = self.tableView

02-tableView的HeaderView和FooterView

  • tableView的header - (x, y, width) 可以隨便指定,(height) 實際數值
  • tableView的footer - (y, width) 可以隨便指定,(x, height) 實際數值

創建一個demo體驗一下:
1.準備:新建文件-->把默認的的viewController刪掉-->新建LJXTableViewController-->把Main.storyboard中默認的控制器刪掉-->重寫拖拽一個UITableViewController-->指定初始箭頭,指定class.
2.添加頭部視圖

- (void)viewDidLoad {[super viewDidLoad];UIView *headerView = [[UIView alloc]init];headerView.backgroundColor =[UIColor redColor];//把某個控件設置到tableHeaderView上時,只有高度需要我們自己設置,前面 X , Y ,Width都可以直接給個0headerView.frame = CGRectMake(0, 0, 0, 100);//設置tableView的最頂部視圖 self.tableView.tableHeaderView = headerView;//-->這里只需要headerView賦值給tableHeaderView 這個屬性,內部就在添加到父控件上我們就不用addSubview:}

3.添加數據驗證一下頭部視圖跟 "一組和多組" 沒有關系

// // LJXTableViewController.m // LJX_tableView的頭部和尾部視圖#import "LJXTableViewController.h"@interface LJXTableViewController ()@end//重用標識 static NSString *ID = @"cell";@implementation LJXTableViewController- (void)viewDidLoad {[super viewDidLoad];UIView *headerView = [[UIView alloc]init];headerView.backgroundColor =[UIColor redColor];//把某個控件設置到tableHeaderView上時,只有高度需要我們自己設置,前面 X , Y ,Width都可以直接給個0headerView.frame = CGRectMake(0, 0, 0, 100);//設置tableView的最頂部視圖 注意:跟一組和多組沒有關系self.tableView.tableHeaderView = headerView;//-->這里只需要headerView賦值給tableHeaderView 這個屬性,內部就在添加到父控件上我們就不用addSubview://注冊cell[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID]; } //2組 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{return 2; } //每組4行 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{return 4; }-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID forIndexPath:indexPath];cell.textLabel.text =@(indexPath.row).description;//簡單設置數據,每個cell顯示一個行數return cell; } @end

4.添加底部視圖

UIButton *footerBtn = [[UIButton alloc]init];footerBtn.backgroundColor = [UIColor purpleColor]; //紫色背景//把某個控件設置到tableHeaderView上時,只有高度需要我們自己設置,前面 X , Y ,Width都可以直接給個0,但是x是可以改的,改了會有影響但不建議去改footerBtn.frame = CGRectMake(0, 0, 0, 100);//設置tableView的最底部視圖self.tableView.tableFooterView = footerBtn;

03-星級評價-需求分析

1.滿星個數 "分數強轉成整形,如4.5轉成整形是4 那就表示有4顆滿星" 2.半星個數 "分數 - 整星個數如果不為0那說明就有一個半星" 3.空心個數 "for(NSInteger i = 已添加星星個數; i < 5; i++)"每一個商家的評分不一樣,所以分值要動態傳入,去動態設置星星樣子

04-星級評價

4.1星級評價實現

創建實體文件夾,方便日后移植
為了方便最后整合代碼時的移植,不直接在控制器中實現,而是單獨創建繼承UIView的類,

// // ZFBLeverStar.h // LJX_星級評價#import <UIKit/UIKit.h>@interface ZFBLeverStar : UIView ///接收評分 @property (nonatomic, assign) CGFloat lever;@end

// // ZFBLeverStar.m // LJX_星級評價#import "ZFBLeverStar.h"@implementation ZFBLeverStar//重寫set方法在里面處理顯示星星圖片的細節 -(void)setLever:(CGFloat)lever{_lever = lever;//1.滿星//把傳過來的分數強轉為整型,整數值就是滿星的個數NSInteger fullStartCount = (NSInteger)lever;for(NSInteger i = 0 ; i < fullStartCount ; i++){[self makeLeverStarWithImageName:@"full_star" andPosition:i];}//2.半星// (取傳過來的個數) - (強轉后的整數),如果 > 0 就表示有半星if((lever - fullStartCount)>0){[self makeLeverStarWithImageName:@"half_star" andPosition:fullStartCount];//如果添加了一個半星那把滿星個數的值做加1 用它當做 目前已經添加星星的總個數了fullStartCount++;}//3.空星 "如果到這來還不夠5顆星 那剩下的就是空星的個數了"for (NSInteger i = fullStartCount; i < 5; i++) {[self makeLeverStarWithImageName:@"empty_star" andPosition:i];} }/**創建星星imageView@param imageName 星星圖片@param position 星星位置 從0開始*/ -(void)makeLeverStarWithImageName:(NSString *)imageName andPosition:(NSInteger)position{//1.創建imageView設置圖片,那么imageView創建出來的就有尺寸UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:imageName]];//2.設置圖片的xCGFloat imageViewX = position * imageView.image.size.width;imageView.frame = CGRectMake(imageViewX, 0, imageView.image.size.width, imageView.image.size.height);[self addSubview:imageView]; }@end

// // ViewController.m // LJX_星級評價#import "ViewController.h" #import "ZFBLeverStar.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];ZFBLeverStar *leverStar = [[ZFBLeverStar alloc]init];leverStar.frame = CGRectMake(100, 100, 60, 12);//素材中圖片2X的是大小24*24,高24/2=12, 寬為5顆*12=60leverStar.backgroundColor = [UIColor purpleColor];leverStar.lever = 2.5;//先傳一個2.5分驗證一下[self.view addSubview:leverStar]; }@end

4.2解決星星重復創建問題

我們只創建添加,沒有管過移除啥的,顧導致傳一次分,創建一次....

解決重復創建的問題
重寫初始化方法(初始化方法它只會調一次),那樣一創建leverStar這個控件,里面就自帶5顆星星imageView,

即對ZFBLeverStar.m做了修改

// // ZFBLeverStar.m // LJX_星級評價#import "ZFBLeverStar.h"@implementation ZFBLeverStar- (instancetype)initWithFrame:(CGRect)frame {self = [super initWithFrame:frame];if (self) {//來了 直接把5個imageView創建添加好for (NSInteger i = 0; i < 5; i++) {UIImageView *imageView =[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"full_star"]];//這個目的不是拿圖片,目的是隨便拿一張圖片,圖片就有了大小了//設置圖片的xCGFloat imageViewX = i * imageView.image.size.width;imageView.frame = CGRectMake(imageViewX, 0, imageView.image.size.width, imageView.image.size.height);[self addSubview:imageView];}}return self; }//重寫set方法在里面處理顯示星星圖片的細節 -(void)setLever:(CGFloat)lever{_lever = lever;//1.滿星//把傳過來的分數強轉為整型,整數值就是滿星的個數NSInteger fullStartCount = (NSInteger)lever;for(NSInteger i = 0 ; i < fullStartCount ; i++){[self makeLeverStarWithImageName:@"full_star" andPosition:i];}//2.半星// (取傳過來的個數) - (強轉后的整數),如果 > 0 就表示有半星if((lever - fullStartCount)>0){[self makeLeverStarWithImageName:@"half_star" andPosition:fullStartCount];//如果添加了一個半星那把滿星個數的值做加1 用它當做 目前已經添加星星的總個數了fullStartCount++;}//3.空星 "如果到這來還不夠5顆星 那剩下的就是空星的個數了"for (NSInteger i = fullStartCount; i < 5; i++) {[self makeLeverStarWithImageName:@"empty_star" andPosition:i];} }/**創建星星imageView@param imageName 星星圖片@param position 星星位置 從0開始*/ -(void)makeLeverStarWithImageName:(NSString *)imageName andPosition:(NSInteger)position{//獲取相應位置的子控件UIImageView *imageView = self.subviews[position];//設置圖片imageView.image = [UIImage imageNamed:imageName]; }@end

4.3 最后深入的優化

這次優化的目的是:日后星級評價更加的方便.--->外部不管用純代碼還有用xib還是用storyboard都比較方便.

如何不想使用代碼方式

使用storyboard


運行ok


支付寶口碑案例開始

自定義cell有3種方式,分別是storyboard,xib,手寫代碼.
我們都使用一遍.這里我們先使用第一種方式使用-->storyboard方式

需求分析

1.頂部是一個TableViewHeaderView 2.組的頭部標題可以停留,說明tableView是plain樣式 3.cell中的數據比較多,系統無法滿足,自定義cell

1.項目準備:
指定類前綴(例如ZFB),分文件夾(目的是為了后面集成到一個項目中),刪除原有Main.storyboard 自己創建一個storyboard(指定class進行關聯,設置為啟動界面),并別忘指定 Main interface



創建控制器: 注意繼承UITableViewController(因為storyboard中我們拖拽的UITableViewControler,所以創建的類也要繼承UITableViewControler)

如果運行后,是白色面板. 排錯方法:打斷點
------>給數據源方法打斷點------->(沒執到時)-往上打斷點
------->[super viewDidLoad]----->(也沒有執行到時)
------>查看有沒有指定控制器class;

把準備好的plist文件和圖片素材拖入案例中

使用了UITableViewController后,指定數據源和遵守協議都不用我們管了.下一步我們來實現相應的數據源方法

2.實現相應的數據源方法

需要的數據,通過第4步會得到.

3.有多少行應該根據數據來

4.加載plist字典轉換模型

去modal文件夾中,創建模型類

//--------------------ZFBBusinessModel.h------------------------ #import <Foundation/Foundation.h>@interface ZFBBusinessModel : NSObject ///頭像 @property (nonatomic, copy) NSString *icon; ///優惠信息 @property (nonatomic, copy) NSString *discount; ///人均消費 @property (nonatomic, strong) NSNumber *averagePrice; ///距離 @property (nonatomic, strong) NSNumber *distance; ///打折 @property (nonatomic, strong) NSNumber *offNum; ///評分 @property (nonatomic, strong) NSNumber *level; ///店名 @property (nonatomic, copy) NSString *name;+ (instancetype)businessWithDict:(NSDictionary *)dict;@end //--------------------ZFBBusinessModel.m------------------------ #import "ZFBBusinessModel.h"@implementation ZFBBusinessModel+(instancetype)businessWithDict:(NSDictionary *)dict{id obj = [[self alloc]init];[obj setValuesForKeysWithDictionary:dict];//--->注意使用KVC編碼,屬性名和字典中的key的名字一定要相同.return obj; }@end

5.在storyboard中給自帶的UITableViewCell指定重用標識 一定要和返回cell的數據源方法是的標識要一樣

UITableView *cell = [tableView dequeueReusableCellWithIdentifier:@"business" forIndexPath:indexPath];

6.在storyboard中給cell添加拖拽相應的控件,并添加約束

6.1拖拽imageView
(plus是3X的在這除以3
工作中一般都2x的,到時候除以2)

因為各個商家圖片不一樣大,顧為了統一

Scale:拉伸圖片
Aspect:圖片長寬的比例,保持圖形的長寬比,保持圖片不變形。

Aspect Fill:在保持長寬比的前提下,縮放圖片,使圖片充滿容器。
Aspect Fit:在保持長寬比的前提下,縮放圖片,使得圖片在容器內完整顯示出來。
Scale to Fill: 縮放圖片,使圖片充滿容器。圖片未必保持長寬比例協調,有可能會拉伸至變形。

6.1拖拽lable設置店名

6.3 先拖個view給星星占個位,后面再處理


6.4拖拽lable設置評分


設置約束

6.4拖拽lable設置人均消費
設置字體大小,設置約束

運行一下看效果,然后再繼續

6.5拖拽lable設置折扣


設置約束


6.6拖拽lable設置距離
設置約束 x和Y


6.7拖拽lable設置減字

設置約束(上邊距8,與上面左邊對齊,)略
減字外面的是正方形,我們設置一下寬高比為1:1,文字居中就ok了


6.8拖拽lable設置隨機立減...
(設置字體及顏色,設置約束,略..)
6.9 修改一下cell的高度

上面修改了business中的高度,只是修改了模型的大小,運行起來還得看 table View的高度大小,所以還得修改table View的高度

6.10 把背景顏色去掉運行一下看看

7.創建一個繼承至UITableViewCell的類,并且指定SB中的UITableViewCell的class為自己創建出來的這個類

8.把SB中Cell內部的子控件連線到指定class的.m中的延展中

8.1增加一個延展

8.2指定class

8.3 子控件連線

9.把模型變成屬性定義在自定義cell類的.h中,在.m重寫模型屬性的set方法在此方法設置數據

9.1 把模型變成屬性定義在自定義cell類的.h中

// ZFBBusinessCell.h#import <UIKit/UIKit.h> @class ZFBBusinessModel; @interface ZFBBusinessCell : UITableViewCell ///模型屬性 注意模型是個對象 用strong @property (nonatomic , strong) ZFBBusinessModel *businessModel;@end

9.2 在.m重寫模型屬性的set方法在此方法設置數據

// // ZFBBusinessCell.m#import "ZFBBusinessCell.h" #import "ZFBBusinessModel.h"//注意導入頭文件 @interface ZFBBusinessCell () ///商店的頭像 @property (weak, nonatomic) IBOutlet UIImageView *iconView; ///店名 @property (weak, nonatomic) IBOutlet UILabel *nameLabel; ///評分 @property (weak, nonatomic) IBOutlet UILabel *levelLabel; ///人均消費 @property (weak, nonatomic) IBOutlet UILabel *averagePriceLabel; ///打折 @property (weak, nonatomic) IBOutlet UILabel *offNumLabel; ///距離 @property (weak, nonatomic) IBOutlet UILabel *distanceLabel; ///優惠信息 @property (weak, nonatomic) IBOutlet UILabel *discountLabel;@end@implementation ZFBBusinessCell//重寫模型屬性的set方法在此方法中給子控件設置數據 -(void)setBusinessModel:(ZFBBusinessModel *)businessModel{_businessModel =businessModel;_iconView.image = [UIImage imageNamed:businessModel.icon];_nameLabel.text = businessModel.name;_levelLabel.text = businessModel.level.description;//level是NSNumber類型的,轉字符串掉description方法_averagePriceLabel.text = [NSString stringWithFormat:@"人均消費 %@ 元",businessModel.averagePrice]; //plist中只存了個數字,要顯示人均消費**元,顧要拼接字符串_offNumLabel.text = [NSString stringWithFormat:@"%@ 折",businessModel.offNum];_distanceLabel.text = [NSString stringWithFormat:@"距離北京石油化工學院 %@ m",businessModel.distance];_discountLabel.text = businessModel.discount; }@end

回到ZFBBusinessController.m中
修改創建的cell類型

設置數據

//2.設置數據 (傳遞模型,這里是單組數據展示, 當只有一組數據的時候用row,多組的時候才先用section再用row)cell.businessModel = self.businessData[indexPath.row];

運行看現階段效果

數據類型有點小問題,8.8折和9.8折后面都一大串,接下來修改

10.打折 把模型中的offNum 改float類型,前提要改一下引入系統框架 UIKit

10.1修改ZFBBusinessModel.h文件

10.2修改ZFBBusinessCell.m文件

運行看效果

11.集成星星,把星星的文件拖拽出來后,指定Storyboard中代表星星的那個View的Class

12.把用來表示星星view連線在自定義cell.m中,引入星星類的頭文件


13.在模型屬性的set方法中,給星星view傳level

_leverView.lever = businessModel.level;


上面報錯是因為我們傳的是CGFloat類型導致的



顧改一下

這是這里又報錯

還要改一下

把星星后面黃色背景顏色去掉,運行看效果

14.創建了一個xib 把xib中的view 寬361 高960

15.在里面拖入一個imageView并且設置好圖片, 注意先 com + = 自適應下 為了后面使用Aspect ratio后圖片不會變形
16. 第一個imageView 上 左 右 8間距 + 寬高比

先使用 com + = 自適應 ,后面再設置寬高比,這樣他會根據真實的尺寸算比例,圖片不會變形

17.再復制3個imageView 但注意它身上約束

即復制完后,clear復制的約束

18.全部選中(com+a) 左對齊 等寬等高 上下間距8

左對齊

等寬等高

上下間距8:

注意在設置上下間距前,要保證兩個圖片之間不要有重合

19.創建一個繼承 至UIView的類,并且給xib指定class

繼承關系是跟最頂層有關系的,最頂層是UIView,就繼續UIView,最頂層是UIButton,那就繼續UIButton. 這里是頂層是UIView.

給xib指定class(其實不指定也可以,因為之間沒有連線,但最好指定一下,說明它們之間是同一類型)

20.把加載xib細節封裝在剛才創建的類中,提供一個可以讓外部調用的類方法,目的降低耦合度.

//######################### // ZFBBusinessPictureView.h #import <UIKit/UIKit.h>@interface ZFBBusinessPictureView : UIView/**加載xib創建頭部視圖*/ +(instancetype)businessPictureView;@end//######################### // ZFBBusinessPictureView.m #import "ZFBBusinessPictureView.h"@implementation ZFBBusinessPictureView/*知識點回顧--兩種加載xib的方式1.NSBundle加載XIB iOS 2.0 的方法2.使用UINib加載XIB iOS 4.0 的方法 做了內存優化"如果內存緊張"內存警告,可以自動釋放,如果有需要會重新自動加載""*/+(instancetype)businessPictureView{UINib *nib = [UINib nibWithNibName:@"ZFBBusinessPicture" bundle:nil];return [[nib instantiateWithOwner:nil options:nil]firstObject]; }@end

21.給tableView設置tableHeaderView 注意要計算它將來真實的高度

回到ZFBBusinessController.m
回到控制器中,導入剛才創建類的頭文件ZFBBusinessPictureView.h

在控制器設置tableView的頭部 視圖.

//2.設置tableView的頭部視圖ZFBBusinessPictureView *pictureView = [ZFBBusinessPictureView businessPictureView];//375 * 960 / 361CGFloat pictureViewHeight = self.tableView.bounds.size.width * pictureView.bounds.size.height / pictureView.bounds.size.width; //根據比例計算真實高度pictureView.frame = CGRectMake(0, 0, self.tableView.bounds.size.width, pictureViewHeight); //寬度最好不要給了,以防有問題self.tableView.tableHeaderView = pictureView; //設置為頭部視圖

22.給tableView設置tableFooterView

//3.設置tableView的尾部視圖UIButton *footerBtn = [[UIButton alloc]init];[footerBtn setTitle:@"點擊加載更多" forState:UIControlStateNormal];[footerBtn setTitleColor:[UIColor colorWithWhite:0.3 alpha:1] forState:UIControlStateNormal];[footerBtn setTitleColor:[UIColor colorWithWhite:0.7 alpha:1] forState:UIControlStateHighlighted];footerBtn.backgroundColor = [UIColor colorWithWhite:0.5 alpha:1];footerBtn.frame = CGRectMake(0, 0, 0, 30);self.tableView.tableFooterView = footerBtn;//設置為尾部視圖

23.實現沒點擊加載更多一次,多輸出一個cell

把之前定義是不可變數組,修改為可變數組,不然就會報警告



24.優化讓其自動滾動

1.atScrollPosition: 的參數為UITableViewScrollPositionMiddle時

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.businessData.count-1 inSection:0];
[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES];


2.atScrollPosition: 的參數為UITableViewScrollPositionBottom時

25.細節處理 讓cell的分割線從最左邊開始

self.tableView.separatorInset = UIEdgeInsetsZero;

后面還沒會慢慢對細節進行處理

檢測自己


看看哪些沒掌握:

1、能夠說出tableViewController的view屬性和tableView是一樣的

2、能夠使用xib布局口碑的頭部視圖

3、能夠說出使用代碼重新設置nib高度的含義是為了適配不同寬度的屏幕

4、能夠使用代碼設置尾部的按鈕

5、能夠說出代碼會調用view的initWithFrame方法

6、能夠說出sb/xib會調用view的aweakFromNib方法

7、能夠將星級評價小框架移植到口碑控制器中

8、能夠解決浮點數轉字符串精度的問題

9、能夠使用代碼解析plist數據

10、能夠使用代碼將字典轉化成模型

11、能夠使用代碼設置tableView的headerView和footerView

簡單回顧過程


1.口碑-數據分析

2.口碑-創建模型

  • 類前綴
  • 分文件夾
  • 素材

3.口碑-解析數據

4.口碑-通過sb加載cell

  • 通過sb加載cell,需要設置cell的Identifier,給sb中的cell設置重用標識即完成注冊單元格

5.口碑-cell的布局

1.商家配圖圖片大小不一樣,所以最好給imageView設置寬高約束,達到配圖尺寸統一 2.label如果只有一行時,只用設置位置即可,尺寸讓它自適應 3.評分view,它的大小不能自適應,所以必須設置寬高約束"60,12" 4.減是個方形的,所以最好設置個寬高比店名字體:14字體 其它是12號字體 到cell邊距15 內部邊距11

6.口碑-自定義cell控件連線

1.cell中的子控件不能連線到控制器,因為當前控制器只有一個,但是將來cell有很多個,所以會報重復連接"連線"錯誤 2.正確作法,應該創建一個繼承至UITableViewCell的類,來管理"描述/表示",設置cell的customClass 3.把cell中子控件的連線,連入到管理cell類的.m的延展中

7.口碑-設置cell數據

引入模型屬性"strong" 重寫模型屬性set方法給cell內部子控件設置數據

8.口碑-移植星級評價

  • 拖拽文件,設置sb中的view為自定義view,連線并在set數據的方法中把數據放在控件上
  • 用自定義星星的類來描述cell中的星星view,加載sb中的小星星view創建出來的對象,就是他指定類創建來出的對象"他們是同一個東西了"
  • 再給level傳入分值即可

9.口碑-頭部視圖-布局

  • 第一個視圖分別設置 上,左,右,寬高比
  • 后面的視圖與前一個等寬,等高,垂直間距,水平居中

10.口碑-頭部視圖-代碼設置縮放比例

- 在xib中調整好位置高度,并在視圖加載完成之后根據'寬度'和'屏幕的寬度'和'屏幕的高度'設置**高度** - tableView的寬 / xib中HeaderView的寬 * xib中HeaderView的高 得到按比例縮放后的realHeaderView的高 - xib中的高 * tableView的寬 / xib中的寬 - xib的高 / xib的寬 * tableView的寬 2: 3 == 4: 6?

11.口碑-尾部視圖

  • 灰度,R=G=B
  • 1為白色 0為黑色

12.口碑-組頭

  • tableview兩種樣式組頭的區別?
    • grouped跟著tableView滾動出去
    • plain可以懸停在上方

13.口碑-添加導航控制器

Editor -> Embedin -> Navgation Contorller

20-MarkMan測量截圖位置

21-KVC

// 方法1 傳統寫法_name = dict[@"name"];// 字典不能保存基本數據類型_age = [dict[@"age"] integerValue]; // 方法2 KVC - `間接`通過 key 設置數值// 注意:基本數據類型,不需要轉換,KVC 可以自動實現轉換![self setValue:dict[@"name"] forKey:@"name"];[self setValue:dict[@"age"] forKey:@"age"]; // 方法3 KVC - 進階,循環遍歷字典for (NSString *key in dict) {// 1. 通過 key 取值id value = dict[key];// 2. 通過 KVC 方法設置數值// -key 對應對象的 `屬性`,如果屬性不存在就崩潰[self setValue:value forKey:key];} // 方法4 KVC 字典轉模型大招 -> 內部實際上就是方法3的實現[self setValuesForKeysWithDictionary:dict];
  • 在保證模型的屬性和字典中的key相同的情況下,字典轉模型使用setValuesForKeysWithDictionary:方法
  • keys value coding 鍵值編碼

附整體代碼

/**總步驟:1.指定類前綴,分文件夾'刪除原有Main.sb' 自己創建一個,并別忘指定 Main interface2.實現相應的數據源方法3.有多少行應該根據數據來4.加載plist字典轉換模型5.在sb中給自帶的UITableViewCell指定重用標識 一定要和返回cell的數據源方法是的標識要一樣6.在SB中給cell添加拖拽相應的控件,并添加約束7.創建一個繼承至UITableViewCell的類,并且指定SB中的UITableViewCell的class為自己創建出來的這個類8.把SB中Cell內部的子控件連線到指定class的.m中的延展中9.把模型變成屬性定義在自定義cell類的.h中,在.m重寫模型屬性的set方法在此方法設置數據10.打折 把模型中的offNum 改float類型,前提要改一下引入系統框架 UIKit11.集成星星,把星星的文件拖拽出來后,指定SB中代表星星的那個View的Class 12.把用來表示星星view連線在自定義cell.m中,引入星星類的頭文件13.在模型屬性的set方法中,給星星view傳level14.創建了一個xib 把xib中的view 寬361 高96015.在里面拖入一個imageView并且設置好圖片, com + = 自適應下 為了不用改寬高比約束值16. 第一個imageView 上 左 右 8間距 + 寬高比17. 復制3個imageView 但注意它身上約束18. 全部選中左對齊 等寬等高 上下間距819. 創建一個繼承 至UIView的類,并且指定class20. 把加載xib細節封裝在此類中,提供一個可以讓外部調用的類方法21.給tableView設置tableHeaderView 注意要計算它將來真實的高度22.給tableView設置tableFooterView23.實現沒點擊加載更多一次,多輸出一個cell24.優化讓其自動滾動25.細節處理 讓cell的分割線從最左邊開始 */

//********************ZFBBusinessController.h***************************** // ZFBBusinessController.h #import <UIKit/UIKit.h>@interface ZFBBusinessController : UITableViewController@end//**********************ZFBBusinessController.m*************************** // // ZFBBusinessController.m // LJX_支付寶口碑(stroyboard搭建)#import "ZFBBusinessController.h" #import "ZFBBusinessModel.h" #import "ZFBBusinessCell.h" #import "ZFBBusinessPictureView.h"@interface ZFBBusinessController () //數據在多個數據源方法中使用,顧聲明一個屬性 @property (nonatomic ,strong)NSMutableArray *businessData; @end@implementation ZFBBusinessController- (void)viewDidLoad {[super viewDidLoad];//1.加載數據self.businessData = [self loadBusinessData];//-->使用方式2時,直接調用方法就行[self loadBusinessData];//2.設置tableView的頭部視圖ZFBBusinessPictureView *pictureView = [ZFBBusinessPictureView businessPictureView];//如果不設置,因為xib中設置的寬度是361,如果在375的手機屏幕上顯示,因為xib中的圖片的寬度沒有寫死,當到了寬屏幕下,變寬,高也會變高,導致圖片會超出父控件, 出了頭部視圖的邊界.//375 * 960 / 361CGFloat pictureViewHeight = self.tableView.bounds.size.width * pictureView.bounds.size.height / pictureView.bounds.size.width; //計算真實高度pictureView.frame = CGRectMake(0, 0, self.tableView.bounds.size.width, pictureViewHeight); //寬度最好不要給了,以防有問題self.tableView.tableHeaderView = pictureView; //設置為頭部視圖//3.設置tableView的尾部視圖UIButton *footerBtn = [[UIButton alloc]init];[footerBtn setTitle:@"點擊加載更多" forState:UIControlStateNormal];// colorWithWhite:0.3 alpha:1 通過灰度來設置顏色 第一個參數如果 傳0就是黑色 如果傳1就表示白色[footerBtn setTitleColor:[UIColor colorWithWhite:0.3 alpha:1] forState:UIControlStateNormal];[footerBtn setTitleColor:[UIColor colorWithWhite:0.7 alpha:1] forState:UIControlStateHighlighted];footerBtn.backgroundColor = [UIColor colorWithWhite:0.5 alpha:1];footerBtn.frame = CGRectMake(0, 0, 0, 30);[footerBtn addTarget:self action:@selector(loadMoreData) forControlEvents:UIControlEventTouchUpInside]; //添加點擊事件self.tableView.tableFooterView = footerBtn;//設置為尾部視圖//小細節處理 :讓分割線從最左邊開始self.tableView.separatorInset = UIEdgeInsetsZero;}#pragma mark -尾部按鈕點擊后會調用此方法 //1.加載更多數據 -(void)loadMoreData{//1.創建一個新的模型ZFBBusinessModel *businessModel = [[ZFBBusinessModel alloc]init];businessModel.icon = @"ss";businessModel.discount = @"全場大派送,2元一件,快來買!";businessModel.averagePrice = @2;businessModel.distance = @20;businessModel.offNum = 2;businessModel.level = 5;businessModel.name = @"西單大悅城!";//2.把新模型添加到保存所以數據的數組中[self.businessData addObject:businessModel];//3.讓數據源方法重新執行[self.tableView reloadData];NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.businessData.count-1 inSection:0];[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES];}#pragma mark -數據源方法 // 應該口碑案例表格就1組,默認就1組,所以不用再寫 //- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ // return 1; //}// 行數 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {return self.businessData.count;//--->使用方式2時: return _businessList.count; }// -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{//1.創建cellZFBBusinessCell *cell = [tableView dequeueReusableCellWithIdentifier:@"business" forIndexPath:indexPath];//-->這里在storyboard中進行注冊cell//2.設置數據 (傳遞模型,這里是單組數據展示, 當只有一組數據的時候用row,多組的時候才先用section再用row)cell.businessModel = self.businessData[indexPath.row];//3.返回cellreturn cell; }#pragma mark -加載數據- (NSMutableArray *)loadBusinessData{//1.加載plistNSMutableArray *dictArr = [NSMutableArray arrayWithContentsOfURL:[[NSBundle mainBundle]URLForResource:@"business.plist" withExtension:nil]];//2. 創建可變數組保存模型 /k?'p?s?t?/ 容量NSMutableArray *arryM = [NSMutableArray arrayWithCapacity:dictArr.count];//3.字典轉模型for(NSDictionary *dict in dictArr){[arryM addObject:[ZFBBusinessModel businessWithDict:dict]];/* 分步寫//3.1 把字典傳遞給模型,讓模型設置自己的屬性ZFBBusinessModel *groupModel = [ZFBBusinessModel businessWithDict:dict];//3.2 把創建好的模型添加到可變數組中.[arryM addObject: groupModel];*/}return arryM; }/*方式2. 加載數據方法的返回值設置為空 ,聲明一個成員變量(給成員變量設置泛型),把可變數組賦值給成員變量1. NSArray<ZFBBusinessModel *> *_businessList; //聲明成員變量,設置泛型2.- (void)loadBusinessData{...code略...._businessList = arryM;}*/@end

// // ZFBBusinessModel.h #import <UIKit/UIKit.h>@interface ZFBBusinessModel : NSObject ///頭像 @property (nonatomic, copy) NSString *icon; ///優惠信息 @property (nonatomic, copy) NSString *discount; ///人均消費 @property (nonatomic, strong) NSNumber *averagePrice; ///距離 @property (nonatomic, strong) NSNumber *distance; ///打折 //浮點數字轉出成字符串時,可能會出現問題,把它轉換成float @property (nonatomic, assign) float offNum; ///評分 @property (nonatomic, assign) CGFloat level; ///店名 @property (nonatomic, copy) NSString *name;+ (instancetype)businessWithDict:(NSDictionary *)dict;@end #import "ZFBBusinessModel.h"@implementation ZFBBusinessModel+(instancetype)businessWithDict:(NSDictionary *)dict{id obj = [[self alloc]init];[obj setValuesForKeysWithDictionary:dict];//--->注意使用KVC編碼,屬性名和字典中的key的名字一定要相同.return obj; }@end

// // ZFBLeverStar.h // LJX_星級評價#import <UIKit/UIKit.h>@interface ZFBLeverStar : UIView ///接收評分 @property (nonatomic, assign) CGFloat lever;@end // // ZFBLeverStar.m // LJX_星級評價#import "ZFBLeverStar.h"@implementation ZFBLeverStar//當一個視圖從xib或storyboard中創建完成之后就會調用此方法 -(void)awakeFromNib{[super awakeFromNib];//來了 直接把5個imageView創建添加好for (NSInteger i = 0; i < 5; i++) {UIImageView *imageView =[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"full_star"]];//這個目的不是拿圖片,目的是隨便拿一張圖片,圖片就有了大小了//設置圖片的xCGFloat imageViewX = i * imageView.image.size.width;imageView.frame = CGRectMake(imageViewX, 0, imageView.image.size.width, imageView.image.size.height);[self addSubview:imageView];} }//此方法只有用代碼創建時才會調用 - (instancetype)initWithFrame:(CGRect)frame {self = [super initWithFrame:frame];if (self) {//來了 直接把5個imageView創建添加好for (NSInteger i = 0; i < 5; i++) {UIImageView *imageView =[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"full_star"]];//這個目的不是拿圖片,目的是隨便拿一張圖片,圖片就有了大小了//設置圖片的xCGFloat imageViewX = i * imageView.image.size.width;imageView.frame = CGRectMake(imageViewX, 0, imageView.image.size.width, imageView.image.size.height);[self addSubview:imageView];}}return self; }//重寫set方法在里面處理顯示星星圖片的細節 -(void)setLever:(CGFloat)lever{_lever = lever;//1.滿星//把傳過來的分數強轉為整型,整數值就是滿星的個數NSInteger fullStartCount = (NSInteger)lever;for(NSInteger i = 0 ; i < fullStartCount ; i++){[self makeLeverStarWithImageName:@"full_star" andPosition:i];}//2.半星// (取傳過來的個數) - (強轉后的整數),如果 > 0 就表示有半星if((lever - fullStartCount)>0){[self makeLeverStarWithImageName:@"half_star" andPosition:fullStartCount];//如果添加了一個半星那把滿星個數的值做加1 用它當做 目前已經添加星星的總個數了fullStartCount++;}//3.空星 "如果到這來還不夠5顆星 那剩下的就是空星的個數了"for (NSInteger i = fullStartCount; i < 5; i++) {[self makeLeverStarWithImageName:@"empty_star" andPosition:i];} }/**創建星星imageView@param imageName 星星圖片@param position 星星位置 從0開始*/ -(void)makeLeverStarWithImageName:(NSString *)imageName andPosition:(NSInteger)position{//獲取相應位置的子控件UIImageView *imageView = self.subviews[position];//設置圖片imageView.image = [UIImage imageNamed:imageName]; }@end/*//1.創建imageView設置圖片,那么imageView創建出來的就有尺寸UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:imageName]];//2.設置圖片的xCGFloat imageViewX = position * imageView.image.size.width;imageView.frame = CGRectMake(imageViewX, 0, imageView.image.size.width, imageView.image.size.height);[self addSubview:imageView];*/

// // ZFBBusinessCell.h#import <UIKit/UIKit.h> @class ZFBBusinessModel; @interface ZFBBusinessCell : UITableViewCell ///模型屬性 注意模型是個對象 用strong @property (nonatomic , strong) ZFBBusinessModel *businessModel;@end // // ZFBBusinessCell.m#import "ZFBBusinessCell.h" #import "ZFBBusinessModel.h"//注意導入頭文件 #import "ZFBLeverStar.h" @interface ZFBBusinessCell () ///商店的頭像 @property (weak, nonatomic) IBOutlet UIImageView *iconView; ///店名 @property (weak, nonatomic) IBOutlet UILabel *nameLabel; ///評分 @property (weak, nonatomic) IBOutlet UILabel *levelLabel; ///人均消費 @property (weak, nonatomic) IBOutlet UILabel *averagePriceLabel; ///打折 @property (weak, nonatomic) IBOutlet UILabel *offNumLabel; ///距離 @property (weak, nonatomic) IBOutlet UILabel *distanceLabel; ///優惠信息 @property (weak, nonatomic) IBOutlet UILabel *discountLabel; ///星級評價 @property (weak, nonatomic) IBOutlet ZFBLeverStar *leverView;@end@implementation ZFBBusinessCell//重寫模型屬性的set方法在此方法中給子控件設置數據 -(void)setBusinessModel:(ZFBBusinessModel *)businessModel{_businessModel =businessModel;_iconView.image = [UIImage imageNamed:businessModel.icon];_nameLabel.text = businessModel.name;_levelLabel.text = @(businessModel.level).description;//level是NSNumber類型的,轉字符串掉description方法_averagePriceLabel.text = [NSString stringWithFormat:@"人均消費 %@ 元",businessModel.averagePrice]; //plist中只存了個數字,要顯示人均消費**元,顧要拼接字符串_offNumLabel.text = [NSString stringWithFormat:@"%@ 折",@(businessModel.offNum).description];_distanceLabel.text = [NSString stringWithFormat:@"距離北京石油化工學院 %@ m",businessModel.distance];_discountLabel.text = businessModel.discount;//傳分_leverView.lever = businessModel.level; }- (void)awakeFromNib {[super awakeFromNib];// Initialization code }- (void)setSelected:(BOOL)selected animated:(BOOL)animated {[super setSelected:selected animated:animated];// Configure the view for the selected state }@end

// // ZFBBusinessPictureView.h#import <UIKit/UIKit.h>@interface ZFBBusinessPictureView : UIView/**加載xib創建頭部視圖*/ +(instancetype)businessPictureView;@end // // ZFBBusinessPictureView.m#import "ZFBBusinessPictureView.h"@implementation ZFBBusinessPictureView/*知識點回顧--兩種加載xib的方式1.NSBundle加載XIB iOS 2.0 的方法2.使用UINib加載XIB iOS 4.0 的方法 做了內存優化"如果內存緊張"內存警告,可以自動釋放,如果有需要會重新自動加載""*/+(instancetype)businessPictureView{UINib *nib = [UINib nibWithNibName:@"ZFBBusinessPicture" bundle:nil];return [[nib instantiateWithOwner:nil options:nil]firstObject]; }@end



轉載于:https://www.cnblogs.com/ljx-xinge/p/07UI-ji-chuUITableView-shi-zhan-zhi-fu-bao-kou-bei.html

總結

以上是生活随笔為你收集整理的07_UI基础_UITableView实战- 支付宝口碑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产女v资源在线观看 | 国产麻豆精品久久一二三 | 不卡av免费在线观看 | 亚洲精品乱码久久久久久蜜桃不爽 | 国产高清不卡在线 | 欧美成天堂网地址 | 成人黄色小说视频 | 天天操天天射天天 | 国产在线观看午夜 | 色综合色综合色综合 | 久久久久久蜜桃一区二区 | 插婷婷 | 国产黄在线播放 | 日韩精品一区二区三区视频播放 | 欧美va天堂在线电影 | www.天天色.com | 色播五月激情综合网 | 97色婷婷人人爽人人 | 亚洲成人精品国产 | 九九九九九国产 | 日韩在线视频免费看 | 黄色精品一区二区 | 韩日视频在线 | 国产一级片毛片 | 一区二区三区日韩精品 | 欧美成年人在线视频 | 91麻豆精品一区二区三区 | 美女在线观看网站 | 色在线免费 | 久草免费电影 | 日本精品视频网站 | 91亚洲精品乱码久久久久久蜜桃 | 又黄又爽的视频在线观看网站 | 中文字幕视频在线播放 | 五月婷婷综合在线视频 | 在线免费色 | 欧洲精品码一区二区三区免费看 | 深爱婷婷久久综合 | 国产成人免费高清 | 成人av教育 | 91网在线 | 欧美日韩免费网站 | 四虎影视精品永久在线观看 | 久久这里只有精品视频99 | 午夜精品久久久久久久99无限制 | 青青色影院 | 人人爽人人 | 日日干视频 | 久久久久久蜜av免费网站 | 欧美日本高清视频 | 在线黄色观看 | 国产精品免费观看国产网曝瓜 | 91完整版| 欧洲亚洲国产视频 | 中文字幕一区在线观看视频 | 欧美午夜精品久久久久 | 久热电影 | 欧美性天天 | 久久国产热视频 | 人人玩人人添人人 | 91av手机在线观看 | 2021av在线| 欧美美女视频在线观看 | 成人免费视频网站 | www.久久视频 | 高清久久久久久 | 五月开心激情 | 人人爽人人澡人人添人人人人 | 亚洲综合色丁香婷婷六月图片 | 国产99久久久国产精品免费看 | 亚洲国产wwwccc36天堂 | 天堂va欧美va亚洲va老司机 | 国内成人av| 日韩免 | 久久xx视频 | 国产美女网站在线观看 | 97操碰| 欧美日韩国产精品一区 | 色插综合 | 黄色国产高清 | www日韩精品 | 成人免费观看av | 成人精品福利 | 97干com| 五月开心六月伊人色婷婷 | 久久免费视频在线观看 | 91最新视频在线观看 | 日本中文字幕网址 | 偷拍福利视频一区二区三区 | 国产手机在线 | 91私密视频 | www久久久 | 欧美日韩免费在线观看视频 | 欧美 日韩 成人 | 日韩精品欧美精品 | 欧美日韩免费一区 | 免费看国产曰批40分钟 | 亚洲国产中文字幕在线观看 | 国产成人一区二区精品非洲 | 日韩精品一区二区不卡 | 亚洲精品视频网 | 欧美国产日韩在线观看 | 欧美狠狠色 | 亚洲综合视频在线 | 婷婷www| 99国内精品久久久久久久 | 91香蕉视频色版 | 九九免费视频 | 亚洲黄色av一区 | 精品在线播放视频 | 四虎永久免费在线观看 | 狠狠操在线 | 色偷偷av男人天堂 | 97人人爽人人 | 丁香六月av| 五月婷婷丁香 | 欧美夫妻性生活电影 | 偷拍精偷拍精品欧洲亚洲网站 | 中文一区二区三区在线观看 | 国产精品免费观看网站 | 亚洲人人爱 | 国产一区在线视频 | 中文一区二区三区在线观看 | 九九视频网站 | 色网站免费在线看 | 精品福利在线视频 | 四虎成人精品永久免费av | 欧美午夜一区二区福利视频 | 91精品啪在线观看国产81旧版 | 99高清视频有精品视频 | 东方av在 | 一级免费黄视频 | 久久九九影视 | 69xx视频 | 色中文字幕在线观看 | 在线视频 国产 日韩 | 在线视频一二三 | av在线播放一区二区三区 | 亚洲一区精品人人爽人人躁 | 91完整版观看 | 91亚色免费视频 | 91麻豆精品国产91久久久无需广告 | 国内久久久久久 | 国产免费一区二区三区网站免费 | 国产99自拍 | 91综合久久一区二区 | 91一区二区三区久久久久国产乱 | 亚洲一区视频在线播放 | 不卡日韩av| 亚洲精品国产成人 | 日韩二区三区在线观看 | 国产99在线免费 | 国产国产人免费人成免费视频 | 4p变态网欧美系列 | 久久久久伊人 | 视频一区视频二区在线观看 | 超碰97公开| 西西www4444大胆在线 | 国产激情电影综合在线看 | 91大神精品视频在线观看 | 欧美日韩三级在线观看 | 深夜免费小视频 | 中文字幕一区二区三区四区视频 | 日本高清xxxx | 一区二区久久 | 欧美日韩超碰 | 久久久国产精品亚洲一区 | 久久三级视频 | 久久91久久久久麻豆精品 | 国产综合在线观看视频 | 国产在线a | 黄色小说在线观看视频 | 国产精品手机在线 | 亚洲精品国产综合99久久夜夜嗨 | 国产偷在线 | www.亚洲激情.com | 久草在线手机视频 | 黄色成人av | 色.com| 91一区二区三区久久久久国产乱 | 国产视频在线观看一区 | 久久久久国产精品免费 | 久久国内精品99久久6app | 一二区av| 天天性天天草 | www天天干| 国产精品亚洲成人 | 一区在线电影 | 日韩免费在线网站 | 久久精品com| www.五月婷婷.com | www.人人草 | 色丁香婷婷| 国产一区视频在线播放 | 久久精品视频免费观看 | 国产午夜精品av一区二区 | 国产资源网 | 欧美黑人猛交 | 久草视频在线观 | 国产手机精品视频 | 国产麻豆精品免费视频 | 久草久热 | 亚洲一级二级 | 久久国产精品影视 | 超碰人人在 | 亚洲精品午夜一区人人爽 | 国内精品视频久久 | 欧美一级片在线播放 | 999久久久久久久久久久 | 天天色天天色天天色 | 粉嫩av一区二区三区四区 | 日韩 在线a | 久久久久久久久久久综合 | 欧美日韩91 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 日本午夜免费福利视频 | 四虎免费av | 日韩伦理一区二区三区av在线 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 9999亚洲 | 日韩色在线 | 国产色网 | 一区二区三区在线视频观看58 | 亚洲精品乱码久久久久久写真 | 最新av网址在线 | 黄色三级av | 成人性生交视频 | 国产精品福利在线观看 | 成人全视频免费观看在线看 | 日韩精品一区二区三区第95 | 久久99久久99免费视频 | 欧美精品免费在线观看 | 久久久久久高潮国产精品视 | 91精品国产三级a在线观看 | 99热这里只有精品国产首页 | 欧美 日韩 成人 | 亚洲精品视频在线免费 | 国产99久久99热这里精品5 | 麻豆影视在线观看 | 国产精品久久久久久久久久东京 | 天天看天天操 | 中文字幕色在线 | 成人一级在线 | 精品中文字幕在线播放 | 97在线看| 一区二区三区影院 | 国产精品久久久久久久久久ktv | 欧美日韩精品在线视频 | 国产美腿白丝袜足在线av | 91视频在线免费看 | 99产精品成人啪免费网站 | 欧美91精品久久久久国产性生爱 | 久久久久免费精品 | 国产精品va在线观看入 | 亚洲国产中文字幕在线观看 | 成人一区在线观看 | 久久99国产综合精品 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 国产精品 中文字幕 亚洲 欧美 | 国产一区二区在线免费观看 | 人人爽人人爽 | 久久亚洲美女 | 日本二区三区在线 | 又爽又黄又无遮挡网站动态图 | 久久午夜国产精品 | 久久亚洲综合国产精品99麻豆的功能介绍 | 精品国产黄色片 | 日一日操一操 | 色wwwww| 亚洲涩涩网 | 国产精品久久久久久久久大全 | 久久这里只有精品视频首页 | 日韩中文字幕免费电影 | 高清av免费看 | 欧美va天堂va视频va在线 | 亚洲人成人99网站 | 久久99亚洲精品久久久久 | 国产美女搞久久 | 成人免费大片黄在线播放 | а天堂中文最新一区二区三区 | 国产中文字幕一区二区三区 | 欧美在线aaa | 日韩videos | 婷婷综合亚洲 | 亚洲福利精品 | 久久久久成人精品亚洲国产 | 狠狠五月天 | 99精品热视频 | 久久成人视屏 | 午夜精品一区二区三区视频免费看 | 国际精品网 | 日韩av一区二区三区四区 | 欧美一级片在线 | 99精品久久久久久久 | 九九热在线观看 | 99婷婷 | 国产色在线,com| 欧美一级久久久久 | 精品一区二区免费 | 夜夜夜精品 | 国产999精品久久久久久 | 免费看一级特黄a大片 | 美女网站色免费 | 一区二区av | 97在线观看免费高清 | 国产精品区二区三区日本 | 免费视频在线观看网站 | 亚洲精品美女在线观看播放 | 成人在线观看av | 欧美二区视频 | 精品国产一区二区三区在线观看 | 成人久久久久久久久久 | 美女网站色在线观看 | 99久久99久国产黄毛片 | 天天干天天射天天插 | 欧美成人一区二区 | 亚洲欧美在线视频免费 | 国产伦理一区二区三区 | 操操碰| 久久免费毛片 | 国产精品免费小视频 | 国产美女视频免费 | 国产午夜激情视频 | 国产精品成人av电影 | 日韩在线激情 | 欧美 激情 国产 91 在线 | 97人人澡人人添人人爽超碰 | 四虎海外影库www4hu | 天天干视频在线 | 狠狠干网 | 久久国产精品一国产精品 | 久久国产精品免费 | 二区中文字幕 | 国产亲近乱来精品 | 日韩一级电影在线观看 | 日韩精品中文字幕在线不卡尤物 | 国产裸体bbb视频 | 开心激情五月婷婷 | 在线婷婷 | 亚洲免费不卡 | 色婷婷六月天 | 久久久男人的天堂 | 激情av在线播放 | 日韩视频免费播放 | 超碰人人99| 香蕉视频91 | 日韩免费久久 | 日韩一区正在播放 | 国产在线v | 国产免费高清视频 | 国产又粗又猛又色又黄网站 | 欧美在线视频一区二区 | 超碰国产在线播放 | 日本午夜免费福利视频 | 亚洲91精品在线观看 | 色婷婷综合久久久中文字幕 | 欧美日韩国产精品一区二区 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 亚洲精品三级 | 18av在线视频 | 亚洲天堂在线观看完整版 | 色婷久久 | 伊人天堂av| 不卡国产视频 | 天天射,天天干 | 国产日韩在线一区 | 麻豆91在线看 | 国产999精品久久久久久麻豆 | av黄色在线观看 | 国产精品h在线观看 | 米奇狠狠狠888 | 成年人黄色免费网站 | 国产精品一区二区果冻传媒 | 在线高清一区 | 九月婷婷综合网 | 豆豆色资源网xfplay | 国产精品视频地址 | 色五月成人 | 国产精品免费视频久久久 | 国产黄大片 | 美女网站色免费 | 日韩中文字幕一区 | 日韩精品一区二区三区丰满 | 日韩在线小视频 | 色综合www | 狠狠躁日日躁狂躁夜夜躁 | 91看毛片| 97精品国产97久久久久久 | 国产麻豆果冻传媒在线观看 | 国偷自产中文字幕亚洲手机在线 | 不卡视频在线 | 色五月情 | www.天天操 | 久久国产午夜精品理论片最新版本 | 人人dvd| 欧美精品久久久久久久久久白贞 | 亚洲精品日韩一区二区电影 | 欧美日韩啪啪 | av免费观看高清 | 美女激情影院 | 成人午夜黄色影院 | 999日韩 | 国产一级做a爱片久久毛片a | 中文字幕丰满人伦在线 | 国产精品网红直播 | 爱情影院aqdy鲁丝片二区 | 成人资源在线观看 | 天天爽夜夜操 | 精品在线播放视频 | 婷婷射五月 | 亚洲婷婷免费 | 久久超碰免费 | 国产精品美女视频 | 大片网站久久 | 四虎在线免费观看视频 | 亚洲一区欧美激情 | 国产一区二区在线播放 | 在线免费观看av网站 | 成年人av在线播放 | 亚洲欧美视频 | 久久伦理电影 | 最新国产一区二区三区 | 韩日精品中文字幕 | 精品国产一区二区三区久久久蜜臀 | 国产色综合| 欧美日韩国产精品一区二区 | 在线观看亚洲精品视频 | 日韩精品久久中文字幕 | 丝袜美腿在线播放 | 成人免费 在线播放 | 午夜性福利 | 波多野结衣日韩 | 五月天六月婷婷 | 色橹橹欧美在线观看视频高清 | 91视频首页 | 91资源在线免费观看 | 麻豆91在线观看 | 99欧美精品 | 四虎影视成人永久免费观看亚洲欧美 | 国产精品五月天 | 99在线精品视频 | 一区在线免费观看 | 综合网伊人 | 手机看片99 | 99精品小视频 | 国产精品涩涩屋www在线观看 | 欧洲视频一区 | 亚洲欧美日韩中文在线 | 亚洲一区二区三区毛片 | 操操操日日 | 日韩一区在线免费观看 | 久久人人爽人人片av | 九色精品在线 | 久久只精品99品免费久23小说 | 日韩中文字幕a | 久久久男人的天堂 | av看片网 | 久久国产手机看片 | 五月天综合色激情 | 伊人精品影院 | 天天天干 | 天天操操 | 性色av免费看 | 91一区二区在线 | 天堂成人在线 | 黄色毛片网站在线观看 | 久久国产欧美日韩 | 色多多视频在线 | 国产精品网址在线观看 | 久久综合影院 | 国产美女网 | 日本久久久久 | 国产资源在线视频 | 亚洲精品综合在线 | 免费福利小视频 | 天天操天天操天天操天天操天天操天天操 | 精品久久久久国产免费第一页 | 99久久精品免费看国产一区二区三区 | 日日射av | 国产成人在线免费观看 | 成年人在线 | 麻豆国产精品永久免费视频 | 欧美最猛性xxxx | 国产精品黄色 | 免费在线观看视频一区 | 日韩大陆欧美高清视频区 | 一区二区三区福利 | 天天艹| 丰满少妇在线观看资源站 | 97人人澡人人爽人人模亚洲 | 欧美日韩视频网站 | 久久精彩 | 久久久高清 | 免费视频黄色 | 2000xxx影视| 久久久久久久久久久久影院 | 操操操综合 | 日韩91av| 国产美女搞久久 | 国产精品第一视频 | 国产精品激情在线观看 | 亚洲欧美国内爽妇网 | 亚洲毛片一区二区三区 | 国产破处在线视频 | 99久久精品国产一区二区三区 | 欧美色综合久久 | 日韩字幕在线 | 丰满少妇在线观看 | 国产一区二区久久久 | 国产亚洲精品久久久久动 | 九九99 | 999超碰| 日av免费| 国产高清网站 | 天天射天天舔天天干 | 亚洲综合色婷婷 | 人人射人人爱 | 色吧久久| www.久热| 日韩精品中文字幕在线 | 狠狠操狠狠插 | 久久国色夜色精品国产 | 亚洲一区二区麻豆 | 91av在线免费观看 | 又黄又刺激的网站 | 69国产精品成人在线播放 | 国产免费资源 | 国产一级精品视频 | 四虎精品成人免费网站 | 久久免费一级片 | 99热都是精品 | 午夜精品一区二区三区免费视频 | 青草草在线视频 | 久久一久久 | 国产免费成人 | 狠狠色狠狠色合久久伊人 | 天天干天天在线 | 99久久精品免费视频 | 婷婷五月色综合 | 久久久久亚洲天堂 | 成人a大片 | 在线观看一区二区精品 | 国产精品黄色av | www久久精品 | 国产中文字幕网 | 顶级欧美色妇4khd | 天天射天天干天天插 | 欧美日韩久久一区 | 国产123区在线观看 国产精品麻豆91 | 91精品久久久久久久91蜜桃 | 国产视频精品网 | 91在线成人 | 久久久精品久久 | av综合av| 日韩a级免费视频 | 国产日产av| 久久精品a| 国产一级电影在线 | 婷婷四房综合激情五月 | 亚洲狠狠操 | 日本久久久亚洲精品 | 97在线视频免费播放 | 欧美无极色| 午夜影院一级 | 色哟哟国产精品 | 麻豆传媒视频在线免费观看 | 久久看片网 | 国产在线1区 | 午夜精品久久一牛影视 | 九色91av | 免费在线观看黄网站 | 国产精品网红福利 | 亚洲国产资源 | 国产日韩视频在线播放 | 亚洲va在线va天堂 | 成人97人人超碰人人99 | 午夜av色 | 在线免费精品视频 | 在线播放国产一区二区三区 | 日韩av快播电影网 | 日日夜夜91 | 亚洲成人黄色在线观看 | 超碰在线免费福利 | 九九九电影免费看 | 91精品国产自产在线观看 | 日韩高清不卡一区二区三区 | 婷婷在线精品视频 | 91精品国 | 一级免费av| 久草在线视频首页 | www.午夜| 日韩欧美国产免费播放 | 免费在线观看成人小视频 | 久热免费在线观看 | 在线观看国产日韩欧美 | 一级特黄av | av网站免费看| 国产成人三级一区二区在线观看一 | 超碰人人在线观看 | 成年人视频在线观看免费 | 亚洲永久精品在线观看 | 六月天综合网 | 国产黄色精品网站 | 97超在线 | 久久字幕 | 久久在线视频精品 | 中文字幕韩在线第一页 | 亚洲欧美日韩国产一区二区 | 欧美日韩xxxxx | 久久五月情影视 | 91亚洲国产成人 | 麻豆国产在线播放 | 亚洲最大成人网4388xx | 成人免费视频网 | 成人免费观看网址 | 亚洲欧美一区二区三区孕妇写真 | 91视频国产高清 | 久久午夜视频 | 久久男人影院 | a级黄色片视频 | 人人搞人人爽 | 五月开心激情网 | 91在线成人 | 久久综合五月天婷婷伊人 | 国产高清精品在线 | 免费在线观看的av网站 | 99精品视频在线播放免费 | 成人啪啪18免费游戏链接 | 久久99亚洲网美利坚合众国 | 日本不卡一区二区三区在线观看 | 久久精品国产亚洲 | 视频在线一区二区三区 | 91九色老 | 国产成人久久精品一区二区三区 | 最新不卡av | 久久久视频在线 | 亚洲成年人免费网站 | 在线观看国产亚洲 | 成人一级黄色片 | avwww在线观看 | 综合色久 | av电影中文字幕在线观看 | 我要看黄色一级片 | 99色国产| 免费视频二区 | 亚洲激情在线播放 | 波多野结衣在线播放一区 | 成人h动漫在线看 | 国产精品成人在线 | 国产日韩欧美在线播放 | 久久99国产精品 | 国产精品国内免费一区二区三区 | 亚洲精品久久久久久中文传媒 | 97人人看 | 中国黄色一级大片 | 亚洲永久精品国产 | 亚洲国产中文在线观看 | 日日夜夜爱 | 欧美在线不卡一区 | 特级毛片在线免费观看 | 99999精品 | 三级av网| 69av视频在线 | 国产人成看黄久久久久久久久 | 99久久精品日本一区二区免费 | 又爽又黄又无遮挡网站动态图 | 久久精品国产精品亚洲 | 69av视频在线观看 | 六月色婷婷 | 国产视频在 | 国产精品国产亚洲精品看不卡15 | 国产一二区视频 | 日韩视频一区二区在线 | 国产精品麻豆免费版 | 国产一区在线免费观看 | 精品免费观看 | 国产最新视频在线观看 | 国产精品视屏 | 超碰在线天天 | 一区二区视频欧美 | 欧美精品久久久久久久久久久 | 天堂av高清 | 久久 国产一区 | 久久久91精品国产 | 久久99久久99精品免视看婷婷 | 婷婷丁香色综合狠狠色 | 天天久久综合 | av天天色 | 91精品国产91久久久久 | 久久这里只有精品9 | 国产99久久九九精品 | 日韩羞羞 | 成年人在线免费看视频 | 亚洲精品视频国产 | 成人h视频在线 | 中文字幕大全 | 欧美日韩精品在线观看 | 国产亚洲成av片在线观看 | 久久精品91视频 | 国产亚洲在线视频 | 日韩av伦理片 | 香蕉手机在线 | 91中文视频| 欧美精品久久久久久久久久白贞 | 婷婷www| 国产中文字幕视频在线 | 日本高清dvd | av大全在线观看 | 99精品国产aⅴ | 国产视频1 | 婷婷在线色 | 在线视频 精品 | 欧美一区二区伦理片 | 在线 你懂 | 黄色一级大片免费看 | 日韩在线观看精品 | 欧美美女视频在线观看 | 久久成人综合视频 | 国产在线一区二区三区播放 | 一区二区精品在线视频 | 亚洲激情国产精品 | 中文字幕第一页av | 黄www在线观看 | 日韩中文字幕免费电影 | 日韩激情在线 | 最新av在线播放 | 国产精品99免视看9 国产精品毛片一区视频 | 日韩啪视频 | 美女久久网站 | 激情欧美一区二区三区 | 国产香蕉av| 香蕉视频网站在线观看 | 97在线观看免费视频 | 国产视频精品网 | 国产最新在线观看 | 久久综合99 | 黄色av大片 | 成人黄色免费在线观看 | 黄色片免费在线 | 麻豆成人精品视频 | 777视频在线观看 | 亚洲成a人片在线www | 视频在线91 | 天天做日日做天天爽视频免费 | 国产精品亚洲精品 | 欧美性护士 | 亚洲精品视频在线观看免费 | 国产午夜小视频 | 国产日韩欧美视频在线观看 | 91香蕉久久 | 啪啪免费视频网站 | 久久精品九色 | 亚洲精品视频在线播放 | 91精品在线免费观看 | 国产玖玖在线 | 六月久久婷婷 | 亚洲干视频在线观看 | 久久免费视频7 | 免费看黄色大全 | 在线视频欧美亚洲 | 免费国产在线观看 | 免费中文字幕 | 亚洲精品国精品久久99热 | 人人狠狠综合久久亚洲 | 亚洲专区中文字幕 | 丁香在线观看完整电影视频 | 超碰在线官网 | 国产成年人av | 色婷婷五| 国产成人精品一二三区 | 免费高清看电视网站 | 五月婷社区 | 国产精品人人做人人爽人人添 | 欧美日韩亚洲国产一区 | www.夜夜草 | 黄色国产在线观看 | 国产网红在线观看 | 国产精品一区二区麻豆 | 97成人超碰 | 久久香蕉国产精品麻豆粉嫩av | 国产精品久久99 | 男女免费视频观看 | 成人av电影免费 | 国产视频 亚洲视频 | 高清在线观看av | 人人澡人 | 欧美日韩中文视频 | 国产一区自拍视频 | 一区二区视频免费在线观看 | 色婷婷色 | 在线激情影院一区 | 久久国产精品一国产精品 | 日本aa在线| 欧美天堂视频在线 | 99这里精品 | 国产麻豆成人传媒免费观看 | 中文成人字幕 | 国产免费一区二区三区网站免费 | 国产一区在线免费 | 中文字幕一区二区三 | 国产精品999久久久 久产久精国产品 | 日韩在线精品视频 | 91免费观看视频网站 | 网址你懂的在线观看 | .国产精品成人自产拍在线观看6 | 久草精品资源 | 日韩最新中文字幕 | 欧美日韩一区二区三区在线观看视频 | 在线观看91网站 | 91在线国内视频 | 国产精品中文久久久久久久 | 日韩av一区二区三区四区 | 日韩在线观看一区二区三区 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 网站你懂的 | 国产一区在线观看免费 | 在线亚洲激情 | 日韩在线精品视频 | 在线免费观看视频 | 五月婷婷av | 一级片在线 | 日本mv大片欧洲mv大片 | 亚洲欧美精品一区二区 | 精品视频123区在线观看 | 色av色av色av | 欧洲精品码一区二区三区免费看 | 91视频高清 | 久久久久久久免费看 | 一区二区三区播放 | 久久久精品福利视频 | 一级黄色片网站 | 中文在线字幕观看电影 | 四虎影视精品 | 性色在线视频 | 亚洲精品午夜一区人人爽 | 欧美一级日韩免费不卡 | 九九色在线观看 | 91麻豆精品国产 | 精品电影一区二区 | 国产精品久久久久久久久久久久午夜片 | 爱色婷婷 | 国产午夜精品一区二区三区 | 国产欧美精品xxxx另类 | 国产成人精品一区二区三区福利 | 久久免费a | 婷婷丁香狠狠爱 | 日韩精品久久久久久久电影99爱 | 开心婷婷色 | aaa黄色毛片| 91最新在线视频 | 永久中文字幕 | 日本天天操| 色爱区综合激月婷婷 | www免费黄色| 国产小视频在线播放 | 日韩在线资源 | 日韩在线观看电影 | 国产高清免费 | 欧美日韩视频在线观看免费 | 日韩三级视频在线观看 | 国产亚洲精品女人久久久久久 | 精品国产精品久久一区免费式 | 精品高清视频 | 摸bbb搡bbb搡bbbb| 免费在线黄网 | 日韩av一区二区在线影视 | 人人插人人 | 国产精品18久久久久久久网站 | 黄色网在线免费观看 | 手机av网站| 色婷婷久久 | 黄色综合 | 麻豆视传媒官网免费观看 | 亚洲电影在线看 | 久久久久久激情 | 91精品在线观看入口 | 天天拍夜夜拍 | 国产免费久久久久 | 亚洲 欧美日韩 国产 中文 | 精品久久久久久久久久岛国gif | 国产一级黄色电影 | 亚洲激情影院 | 久久99精品国产99久久 | 国产精品综合av一区二区国产馆 | 天天亚洲| 久久国产精品99久久久久 | av片在线观看 | 国产一级在线免费观看 | 亚洲一二区精品 | 中文字幕在线观看的网站 | 久久少妇免费视频 | 精品在线播放视频 | 色综合久久中文字幕综合网 | 日韩网站在线免费观看 | 亚洲天堂自拍视频 | 国产精品成人一区二区 | 成年人免费电影在线观看 | 超碰日韩| 婷婷亚洲五月 | 97视频资源 | 国产精品片 | 黄网在线免费观看 | 国产在线色| www亚洲国产 | 久久不卡免费视频 | 在线一二三区 | 亚洲成熟女人毛片在线 | 久草精品在线观看 | 亚洲综合丁香 | 91av亚洲 | 99久久久久久久久 | 精品国产成人av在线免 | 毛片视频网址 | 不卡中文字幕在线 | 2019久久精品 | 精品亚洲成a人在线观看 | 亚洲综合激情网 | 天天操狠狠操 | 久久亚洲国产精品 | 国产一区二区在线播放视频 | 久久视频在线 | 国产三级香港三韩国三级 | 成人久久综合 | 91亚洲精品乱码久久久久久蜜桃 | av中文字幕网址 | 日韩两性视频 | 九九色网 | 欧美日韩二区三区 | 日韩日韩日韩日韩 | 91香蕉视频污在线 | 国产精品久久久777 成人手机在线视频 | 麻豆免费在线视频 | 久久综合成人网 | 日韩电影黄色 | 婷婷色在线观看 | 久草在线精品观看 | 99在线精品视频在线观看 | 精品福利网| 99精品免费网| 天天干.com| 日韩久久久| 欧美日产一区 | 久久久久福利视频 | 天天操天天射天天添 | 亚洲一区尤物 | 久久亚洲精品电影 | 午夜精品福利一区二区三区蜜桃 | 亚洲国产精品一区二区久久hs | 国产精品不卡在线播放 | 国产成人av电影在线观看 | 超碰com| 天天躁天天狠天天透 | 日韩手机在线 | 特级xxxxx欧美 | 伊人五月天av | 狠狠色丁香久久婷婷综合_中 | 91成人精品一区在线播放 | 超碰在线97观看 | 精品福利视频在线 | 亚洲精品一区二区久 | 色黄久久久久久 | 日韩av一区二区在线播放 | 久久精品一区 | 日韩精品久久久久久久电影99爱 | 日韩视频1 | 亚洲天堂自拍视频 | 欧美天天综合 | 91在线小视频 | 91福利国产在线观看 | 亚洲国产av精品毛片鲁大师 | 中文字幕日韩精品有码视频 | 99精品国产视频 | 中文字幕成人 | av视屏在线播放 | 国产精品网红直播 | 亚洲精品国产精品乱码在线观看 | 欧美激情精品一区 | 日本乱视频 | 天天·日日日干 | 精品久久一二三区 | av大片网址 | 日日夜夜中文字幕 | 国产成人精品在线播放 | 色综合亚洲精品激情狠狠 | 国产福利专区 | 免费色av | 午夜精品久久久久久久久久 | 久久成人高清 | 美女天天操| 91精品免费在线观看 | 狠狠狠狠干 | 久操伊人| 337p日本大胆噜噜噜噜 | 91在线视频播放 | 国产一级免费播放 | 亚洲精品免费视频 | 一区二区三区四区五区在线视频 | 黄色小说免费在线观看 |