【UIKit】UITableView.04

UITableView.04:

【1】拖入一个UITableView

【2】将TableView的dataSource与控制器连接

【3】首先得遵循UITableView的数据源协议<UITableViewDataSource>

【4】加入图标文件

【5】代码

1.创建一个Product类,用来作为对象内容表示产品信息

  

2.在Product.h中添加声明代码

@interface Product : NSObject
/*********设置产品内容信息*********/
/* 图片*/
@property (nonatomic,strong)NSString *icon;
/* 产品名称*/
@property (nonatomic,strong)NSString *name;
/* 产品描述(不能写description)*/
@property (nonatomic,strong)NSString *desc;
@end

3.创建1个空个数组,创建30个Product,分别加入产品信息,然后加入数组。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // 空的数组
    NSMutableArray *data=[NSMutableArray array];
    for(int i=0;i<30;i++)
    {
        /**********创建30个product************/
        Product *p=[[Product alloc] init];
        // 产品名
        p.name=[NSString stringWithFormat:@"产品-%d",i];
        // 产品描述
        p.desc=[NSString stringWithFormat:@"%@好好好好!!!!",p.name];

        /**********随机插入图片****************/
        // 创建1-9的随机数
        int index=arc4random_uniform(8)+1;
        p.icon=[NSString stringWithFormat:@"00%d.png",index];

        /**********加入数组*******************/
        [data addObject:p];
    }
    // 赋值
    self.data=data;
}

4.返回一共有多少行

#pragma  mark 数据源方法
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.data.count;
}

5.返回每一行显示的数据内容

#pragma  mark 返回每一行显示的数据
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];

    /**********取出这行对应的Product对象************/
   // 创建一个product指向这一行
    Product *p=self.data[indexPath.row];

    // 加入标题
    cell.textLabel.text=p.name;
    // 加入内容
    cell.detailTextLabel.text=p.desc;
    //加入图片
    cell.imageView.image=[UIImage imageNamed:p.icon];
    return cell;
}

6.要使用点击一下,就会显示一个Alert,就需要使用代理

  1)连线

    

  2)加入协议<UITableViewDelegate>

  3) 代码

#pragma mark -代理方法
#pragma mark 该方法是选中某一行就会调用
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 1.获得被点击这行对应的产品信息
    Product *p = self.data[indexPath.row];

    // 弹窗
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"产品信息"
                                                  message:nil
                                                 delegate:self
                                        cancelButtonTitle:@"取消"
                                        otherButtonTitles:@"确定", nil];

    /****保存点击的行号给下面的Alert方法使用********/// 这一行实际效果不在这一行。
    alert.tag = indexPath.row;

    // alert 样式设置
    alert.alertViewStyle=UIAlertViewStylePlainTextInput;

    // 取出文本输入框,将文本内容赋值给输入框
    [alert textFieldAtIndex:0].text=p.name;

    // alert 调用show方法显示对话框
    [alert show];

    NSLog(@"第%d行",indexPath.row);
}

7.将弹出来的文本框中的“确定”按钮能真正修改,需要使用协议

  1) 添加协议<UIAlertViewDelegate>

  2) 1.获取到文本框中内容

      2.将内容先更新到对象数组

    3.将数组进行局部更新或者全局更新

#pragma mark -AlertView 代理方法
#pragma mark 点击了AlertView的某个按钮时调用
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if(buttonIndex==1) //点击了确定按钮
    {
    //1.取得文本框的文字
        NSString *name= [alertView textFieldAtIndex:0].text;
   // 2. 显示到对应的行上去使用MVC /***********更新数据************/
        //(alertView,tag 就是行号)
        Product *p=self.data[alertView.tag];
      // 修改对象,只改掉模型,只能通过下面的刷新后显示
        p.name=name;
        //3.刷新界面
    /*重新加载数据
     本质:重新向数据源请求数据(重新调用数据源的响应方法)
     */

        /*******局部更新*******/
        //表示的是哪一行
        NSIndexPath *path = [NSIndexPath indexPathForRow:alertView.tag inSection:0];
        //刷新单行,并且有动画
        [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationLeft];

        /*******这个是全部更新******/
       //[self.tableView reloadData];// 这个是全部更新
    }
}

【UIKit】UITableView.04,布布扣,bubuko.com

时间: 2024-10-14 22:53:40

【UIKit】UITableView.04的相关文章

【UIKit】UITableView.05 性能优化

UITableView.05 性能优化: [为何要性能优化]:TableView拖屏过程中,不断有对象"消失"在屏幕上,但是这样的对象还是存在的,当拖拉过多后,导致内存严重泄漏. 解决方法:仅提供有限的对象,拖拉过程中,只是将内存地址存放的内容进行改变. [旧代码] -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITable

【UIKit】UITableView.02

UITableView.02: [1]拖入一个UITableView [2]将TableView的dataSource与控制器连接 [3]首先得遵循UITableView的数据源协议<UITableViewDataSource> [4]将数据plist文件拖入 [5]代码 1.viewDidLoad只加载一次,所以用来加载plist文件中的数据. 新建一个bundel用来指定文件路径 pathForResource:文件名 ofType:文件格式 - (void)viewDidLoad { [

【UIKit】UITableView.09 自定义cell

UITableView.09 自定义cell : 注意:在创建一个故事版的时候,需要将控制器的class修改成对应的class否则效果实现不了[如图] 1.这段代码就是用来设置cell所对应的xib,类似于绑定  // 1.想要使用文件包里面的资源就要使用[NSBundle mainBundle] // 2.loadNibNamed的意思是加载一个xib文件,名字为BookCell cell=[[[NSBundle mainBundle]loadNibNamed:@"BookCell"

【UIKit】UITableView.06

UITableView.06: [1]拖入ToolBar,TableView [2]连线,设置代理模式,数据源等(ToolBar中的垃圾桶也需要连接方法removeRow) [3]代码 1.声明 mydata :所有的数据,人工初始化的数据30行. selectedData:选中的数据,视频中点击后选中的数据 selectedRows:只是为了删除时候能得到所选择的数据行而创建的数组 @interface ViewController () // 所有的总数据 @property (strong

【UIKit】UITableView.07 编辑模式

[1]拖动好界面 [2]设置协议,数据源 [3]代码 1.声明可变数组,用来存放所有数据对象 @interface ViewController () @property(nonatomic,strong)NSMutableArray *mydata; @end 2.初始化数据[创建30个对象数据] - (void)viewDidLoad { [super viewDidLoad]; self.mydata=[NSMutableArray array]; for(int i =0;i<30;i+

【UIKit】UITableView.01

UITableView.01: section:组别 row:行号 [1]拖入一个UITableView [2]将TableView的dataSource与控制器连接 [3]首先得遵循UITableView的数据源协议<UITableViewDataSource> 代码 1.加入显示数据内容 - (void)viewDidLoad { [super viewDidLoad]; [email protected][@"广州" ,@"梅州",@"深

【UIKit】UITableView.08 常用属性

UITableView.08 常用属性:  以上图片转自http://blog.csdn.net/totogo2010/article/details/7642908 以上图片转自http://blog.csdn.net/totogo2010/article/details/7642908 1.设置Section的数量 - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{ return TitleData; }

【UIKit】UITableView.03

UITableView.03: [1]拖入一个UITableView [2]将TableView的dataSource与控制器连接 [3]首先得遵循UITableView的数据源协议<UITableViewDataSource> [4]加入图标文件 [5]代码 1.设置一共多少组,系统默认是1组,所以不写的话就默认1组 #pragma mark 返回多少组 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { //

【Espruino】NO.04 让灯自由闪动

http://blog.csdn.net/qwert1213131/article/details/26952811 本文属于个人理解,能力有限,纰漏在所难免,还望指正! [小鱼有点电] 上一节内容讲解了如何让LED小灯亮与灭,如果要实现闪烁的话,需要瞧很多代码,而且无法控制亮灭的时间间隔.本节,我们将采用两种方法,分别引入三个函数来分别实现闪烁功能,让控制更简单更准确. 第一种方法:通过延时函数来搞定 setTimeout()函数描述:在经过timeout个毫秒后执行function功能,返回