第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。 加油!

时间: 2024-10-17 15:12:35

第4课、UITableView专题(三)的相关文章

分析Linux磁盘管理与文件系统专题三

1.前言 紧接着我的上一篇博客进行磁盘管理操作: http://zhangfengzhe.blog.51cto.com/8855103/1430531 我们已经对磁盘进行了分区,信息如下: [[email protected] ~]# fdisk -l /dev/sdb Disk /dev/sdb: 1073 MB, 1073741824 bytes 255 heads, 63 sectors/track, 130 cylinders Units = cylinders of 16065 * 5

[C# 网络编程系列]专题三:自定义Web服务器

转自:http://www.cnblogs.com/zhili/archive/2012/08/23/2652460.html 前言: 经过前面的专题中对网络层协议和HTTP协议的简单介绍相信大家对网络中的协议有了大致的了解的, 本专题将针对HTTP协议定义一个Web服务器,我们平常浏览网页通过在浏览器中输入一个网址就可以看到我们想要的网页,这个过程中浏览器只是一个客户端,浏览器(应用层应用程序)通过HTTP协议把用户请求发送到服务端, 服务器接受到发送来的HTTP请求,然后对请求进行处理和响应

UI标签库专题三:JEECG智能开发平台 FormValidation(表单提交及验证标签)

?? 1. FormValidation(表单提交及验证标签) 1.1.  参数 属性名 类型 描述 是否必须 默认值 action string 表单提交路径 否 null formid string 表单唯一标示 是 formobj refresh boolean dialog为true时是否刷新父页面 否 true callback string 表单提交完成后的回调函数 否 null beforeSubmit string 表单提交前的处理函数 否 null btnsub string

搜索引擎算法研究专题三:聚集索引与非聚集索引介绍

搜索引擎算法研究专题三:聚集索引与非聚集索引介绍 聚集索引介绍 在聚集索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同.表只能包含一个聚集索引. 如果不是聚集索引,表中各行的物理顺序与键值的逻辑顺序不匹配.聚集索引比非聚集索引有更快的数据访问速度. 聚集索引通常可加快 UPDATE 和 DELETE 操作的速度,因为这两个操作需要读取大量的数据.创建或修改聚集索引可能要花很长时间,因为执行这两个操作时要在磁盘上对表的行进行重组. 可考虑将聚集索引用于: 1.包含数量有限的唯一值的列,如 s

第4课、UITableView专题(一)

一. 创建项目 storyboard . 二. 往ViewController上拖一个UITableView上去. 此时,建立连线,右键TableView,设置datasource,到Controller上. 三. 在.h文件中,UIViewController要遵守UITableViewDataSource这个协议. 四. 如果此时,Run, 就会报错,可以看下错误信息. 提示没有实现numberOfSectionsInTableView方法. 五. 在.m文件中,整理下重要和必须的几个方法:

第4课、UITableView专题(四)

重构下单元格方法 #pragma mark 单元格内容 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // UITableViewCell * cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];

第4课、UITableView专题(五)

目标: 主从表关系 : 点击“省份名称” -  显示“城市列表” #import "MainTableViewController.h" #import "ShiTableViewController.h" @interface MainTableViewController () //省份数组 @property (strong, nonatomic) NSArray * arrSheng; //城市字典 @property (strong, nonatomic)

第4课、UITableView专题(二)

对TableView进一步理解 1.  创建项目.-- 省市级联小例子. 2.  添加.plist文件.可以理解为数据字典.键值对(Key - Value) 2.1 cities.plist  - 城市 2.2 provinces.plist -  省份 3.  常用方法: 3.1  QQ,微信,通讯录常见的,列表右侧有:ABCDE... 字样,就是如下方法. - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView

UI第九、第十、第十一课UITableView

主要内容:UITableView 一.表视图 UITableView表示图:通常用来管理一组具有相同数据结构的数据 UITableView继承与UIScrollView,所有可以滚动,表示图的每一个数据都显示在UITableViewCell对象中,表示图可以分区显示数据,每个分区称为一个section,每一行称为row,编号都是从0开始 二.表示图的创建 每一行中要显示的数据,需要有一个数据源DataSource 那么需要遵守两个协议: - (NSInteger)tableView:(UITab