首页 > 代码库 > 第4课、UITableView专题(三)

第4课、UITableView专题(三)

 

 

 

一、本次小例子截图:

 

      

 

二、代码如下:

 

#import <Foundation/Foundation.h>@interface Product : NSObject//标题@property (strong, nonatomic) NSString * title;//描述@property (strong, nonatomic) NSString * desc;//图片@property (strong, nonatomic) NSString * imageName;@end

 

 

#import <UIKit/UIKit.h>@interface ViewController : UITableViewController<UIAlertViewDelegate>@end

 

 

#import "ViewController.h"#import "Product.h"@interface ViewController ()@property (strong, nonatomic) NSMutableArray * arrProducts;@end@implementation ViewController- (void)viewDidLoad{    [super viewDidLoad];            //0. 数组初始化    //实例化商品列表数组,如果能够准确知道数组容量的时候,不要用array直接实例化可变数组    self.arrProducts = [NSMutableArray arrayWithCapacity:50];        //1. 创建Model    for (int i=0; i<50; i++)    {        Product * pro = [[Product alloc] init];        pro.title = [NSString stringWithFormat:@"商品%i", i+1];        pro.desc = @"描述商品信息";        pro.imageName = [NSString stringWithFormat:@"00%i", arc4random_uniform(9)+1];                //2. 添加到数组        [self.arrProducts addObject:pro];    }    }#pragma mark - tableView dataSource#pragma mark  分组数量#pragma mark  每组行数-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:    (NSInteger)section{    return self.arrProducts.count;}#pragma mark  每行内容-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    UITableViewCell * cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];        Product * pro = self.arrProducts[indexPath.row];        //1. cell标题    cell.textLabel.text = pro.title;    //2. cell图标    cell.imageView.image = [UIImage imageNamed:pro.imageName];    //3. cell详细信息    cell.detailTextLabel.text = pro.desc;    //4. cell右侧图标    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;   //箭头        return cell;}#pragma mark TableView Delegate//cell 高度-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{    return 60;}#pragma mark 点击某一行-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    Product * pro = self.arrProducts[indexPath.row];        UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"标题" message:@"我在学习TableView" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];    [alert setAlertViewStyle:UIAlertViewStylePlainTextInput];   //设置样式    [[alert textFieldAtIndex:0] setText:pro.title];     //赋值    [alert show];}#pragma mark - UIAlertView Delegate- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{    //NSLog(@"%i", buttonIndex);    if (!buttonIndex)    //取消        return;        //0. 获得修改    NSString * stringTitle = [alertView textFieldAtIndex:0].text;    //1. 修改model    NSIndexPath * indexPath = [self.tableView indexPathForSelectedRow];    Product * pro = self.arrProducts[indexPath.row];    pro.title = stringTitle;        //2. 刷新TableView        //2.1 刷新全部数据,当数量庞大时,不合适。(无动画效果)    //[self.tableView reloadData];        //刷新局部(有动画效果)    [self.tableView reloadRowsAtIndexPaths:[self.tableView indexPathsForSelectedRows] withRowAnimation:UITableViewRowAnimationFade];        }@end

 

 

三、 知识点记录

  1.  引入 MVC的模型(Model),即:Product  。 

    1.1  声明了几个属性,为了处理对模型数据的修改。

    1.2  初始化模型,并添加到数组中。

 

  2.  设置Cell高度方法

      -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

 

 

  3.  使用UIAlertView 及 代理。

 

  4.  刷新tableView。

    4.1  局部刷新 (有动画效果)

        [self.tableView reloadRowsAtIndexPaths:[self.tableView indexPathsForSelectedRows] withRowAnimation:UITableViewRowAnimationFade];

    4.2 全部刷新(没有动画效果)

        [self.tableView reloadData];  

  

  5. 补充一个MVC架构的图片。易于理解。

 

 

 

  

 

 

    

 

四、 问题记录

  1.   像QQ, 微信 等, 发出的信息, 自动适配Cell高度, 怎么做到的?

  2.   UIAlertView 除了枚举的那几个样式, 怎么自定义UI ?

  

 

 

五、随笔

  1.  IOS app 有好多都是 UITableView 列表的效果。 

  2.  尽可能是理解基本属性,方法。 等熟了, 尝试 抽tableView。 加油!

 

 

 

 

第4课、UITableView专题(三)