最后效果图:

Girl.h

//
// Girl.h
// 11_tableView的使用_红楼梦
//
// Created by beyond on 14-7-26.
// Copyright (c) 2014年 com.beyond. All rights reserved.
// #import <Foundation/Foundation.h> @interface Girl : NSObject
// UI控件用weak,字符串用copy,其它对象用strong
// 头像图片名
@property(nonatomic,copy)NSString *headImgName;
// 姓名
@property(nonatomic,copy)NSString *name;
// 判词
@property(nonatomic,copy)NSString *verdict;
// 提供一个类方法,即构造函数,返回封装好数据的对象(返回id亦可)
+ (Girl *)girlNamed:(NSString *)name headImgName:(NSString*)headImgName verdict:(NSString *)verdict;
@end

Girl.m

//
// Girl.m
// 11_tableView的使用_红楼梦
//
// Created by beyond on 14-7-26.
// Copyright (c) 2014年 com.beyond. All rights reserved.
// #import "Girl.h" @implementation Girl
// 提供一个类方法,即构造函数,返回封装好数据的对象(返回id亦可)
+(Girl *)girlNamed:(NSString *)name headImgName:(NSString *)headImgName verdict:(NSString *)verdict
{
Girl *girl = [[Girl alloc]init];
girl.name = name;
girl.headImgName = headImgName;
girl.verdict = verdict;
return girl;
}
@end

BeyondViewController.h

//
// BeyondViewController.h
// 11_tableView的使用_红楼梦
//
// Created by beyond on 14-7-26.
// Copyright (c) 2014年 com.beyond. All rights reserved.
// #import <UIKit/UIKit.h> @interface BeyondViewController : UIViewController
// 又一次刷新表格时要用到
@property (weak, nonatomic) IBOutlet UITableView *tableView; @end

BeyondViewController.m

//
// BeyondViewController.m
// 11_tableView的使用_红楼梦
//
// Created by beyond on 14-7-26.
// Copyright (c) 2014年 com.beyond. All rights reserved.
// #import "BeyondViewController.h"
#import "Girl.h"
@interface BeyondViewController ()<UITableViewDataSource,UITableViewDelegate,UIAlertViewDelegate>
{
// 存放假数据
NSMutableArray *_array;
} @end @implementation BeyondViewController - (void)viewDidLoad
{
[super viewDidLoad];
_array = [NSMutableArray array];
// 假数据
[_array addObject:[Girl girlNamed:@"林黛玉" headImgName:@"0.png" verdict:@"可叹停机德,堪怜咏絮才。 玉带林中挂。金簪雪里埋。"]]; [_array addObject:[Girl girlNamed:@"薛宝钗" headImgName:@"1.png" verdict:@"可叹停机德,堪怜咏絮才。玉带林中挂,金簪雪里埋。"]]; [_array addObject:[Girl girlNamed:@"妙玉" headImgName:@"2.png" verdict:@"欲洁何曾洁,云空未必空。可怜金玉质,终陷淖泥中。 "]]; [_array addObject:[Girl girlNamed:@"史湘云" headImgName:@"3.png" verdict:@"富贵又何为?襁褓之间父母违。 展眼吊斜辉。湘江水逝楚云飞。"]]; [_array addObject:[Girl girlNamed:@"探春" headImgName:@"4.png" verdict:@"才自清明志自高,生于末世运偏消。 清明涕泣江边望,千里东风一梦遥。"]]; [_array addObject:[Girl girlNamed:@"惜春" headImgName:@"5.png" verdict:@"堪破三春景不常,缁衣顿改昔年妆。可怜秀户侯门女,独卧青灯古佛旁。"]]; [_array addObject:[Girl girlNamed:@"王熙凤" headImgName:@"6.png" verdict:@"凡鸟偏从末世来,都知爱慕此生才。 一从二令三人木。哭向金陵事可哀。 "]]; } #pragma mark - tableView的数据源方法 // 数据源方法,特例,重要~ 一共同拥有多少个分组 (默认就是返回1)
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// 单组数据显示,无需分组,故返回 1,(默认就是返回1)
return 1;
}
// 数据源方法,每一组,有多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 7;
}
// 数据源方法,每一组的每一行应该显示怎么的界面(含封装的数据),重点!!!
// 每当有一行cell 进入视野范围就会调用
// 必须实现否则,Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellID = @"Beyond";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (cell == nil) {
// 假设池中没取到,则又一次生成一个cell
/*
cell的4种样式:
1,default 左图右文字
2,subtitle 左图 上文字大 下文字小
3,value 1 左图 左文字大 右文字小
3,value 2 恶心 左文字小 右文字大
*/
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellID];
}
// 设置cell中独一无二的内容
Girl *girl = _array[indexPath.row]; cell.imageView.image = [UIImage imageNamed:girl.headImgName];
cell.textLabel.text = girl.name;
cell.detailTextLabel.text = girl.verdict;
// 设置单元的右边附属
// cell.accessoryType = UITableViewCellAccessoryDetailButton;
// cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
// 返回cell
return cell;
} #pragma mark - tableView的代理方法
// 代理方法,每一行多高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 93;
} // 代理方法,将要点击某一行的时候调用
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"will select----%d",indexPath.row); return indexPath;
}
// 代理方法,当点击一行时调用
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"did select----%d",indexPath.row);
[tableView deselectRowAtIndexPath:indexPath animated:YES];
Girl *girl = _array[indexPath.row];
// 弹出姓名,以供用户更改
// 设置代理的目的是响应alert的button点击事件
//UIAlertView *alert = [[UIAlertView alloc] initWithTitle:girl.name message:girl.verdict delgate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"other", nil];
UIAlertView *alert = [[UIAlertView alloc]init];
[alert initWithTitle:girl.name message:girl.verdict delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
// alertViewStyle 样式----password
// alert.alertViewStyle = UIAlertViewStyleSecureTextInput;
// alertViewStyle 样式----一般的文本输入框
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
// alertViewStyle 样式----username及password登录框
// alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;
// alertViewStyle 样式----标签显示
// alert.alertViewStyle = UIAlertViewStyleDefault; // usernamepassword的情况下有两个文本框
UITextField *textField = [alert textFieldAtIndex:0];
textField.text = girl.name;
// 关键代码,通过tag将点击的行号带给alertView的代理方法,还能够通过利用代理即控制器的成员进行 行号 的传递~
textField.tag = indexPath.row;
// 显示alertView
[alert show];
/*
默认情况下,上面的alert是局部变量,在本方法调完的时候,会被释放
可是,[alert show]方法,会有一种机制(比方UIWindow会持有它的引用,使之不被销毁)
*/
}
// 代理方法,当取消点击一行时调用
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"did deselect row----%d",indexPath.row);
} #pragma mark - UIAlertViewDelegate的代理方法
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
// 查看点击了alertView里面的哪一个button,取消button是 0
NSLog(@"alertView里面的buttonindex---%d",buttonIndex);
if (buttonIndex == 0) {
// 0代表取消button
return;
}else if (buttonIndex == 1){
// 1代表确定button,更新数据源,又一次载入数据
UITextField *textField = [alertView textFieldAtIndex:0];
NSString *newName = [textField text];
// robust推断
if ([newName isEqualToString:@""]) { return;
}
// 先更新数据源
int row = textField.tag;
Girl *girl = _array[row];
girl.name = newName;
// 再,所有又一次载入数据
// [_tableView reloadData]; // 最好是,局部刷新数据,通过row生成一个一个indexPath组成数组
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0];
NSArray *indexPaths = @[indexPath];
[_tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationLeft];
}
} @end

tableViewCellAccessory

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

tableViewCellStyle

tableView数据源

版权声明:本文博客原创文章,博客,未经同意,不得转载。

iOS_11_tableViewCell使用alertView变更数据的更多相关文章

  1. [ios]利用alertView 插入数据都数据库。笔记

    利用alertView 插入数据都数据库 -(void)addItemToList { UIAlertView *alter=[[UIAlertViewalloc]initWithTitle:@&qu ...

  2. SQL Server 变更数据捕获(CDC)监控表数据

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现过程(Realization) 补充说明(Addon) 参考文献(References) ...

  3. SQL Server 变更数据捕获(CDC)

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/字段/对象更改 概述 变更数据捕获用于捕获应用到 SQL Server 表中的插入.更新和删除活动,并以易于使用的关系格式提供这些 ...

  4. SQL Server 2008中新增的 1.变更数据捕获(CDC) 和 2.更改跟踪

    概述 1.变更数据捕获(CDC)        每一次的数据操作都会记录下来 2.更改跟踪       只会记录最新一条记录   以上两种的区别:         http://blog.csdn.n ...

  5. SQL Server 2008中新增的变更数据捕获(CDC)和更改跟踪

    来源:http://www.cnblogs.com/downmoon/archive/2012/04/10/2439462.html  本文主要介绍SQL Server中记录数据变更的四个方法:触发器 ...

  6. CDC变更数据捕获

    CDC变更数据捕获 (2013-03-20 15:25:52)   分类: SQL SQL Server中记录数据变更的四个方法:触发器.Output子句.变更数据捕获(Change Data Cap ...

  7. SqlServer 2014该日志未截断,因为其开始处的记录是挂起的复制操作或变更数据捕获

    环境:AlwaysOn集群 操作系统:Windows Server 2008 R2 数据库: SQL Server 2014 错误提示:“该日志未截断,因为其开始处的记录是挂起的复制操作或变更数据捕获 ...

  8. mysql变更数据的捕获和入库

    问题:涉及状态的信息,mysql中是update的,缺少中间状态的记录.数据分析中需要这部分数据. 思路:后端服务通过监控某张表的某个字段,根据mysql的binlog文件,还原数据,发送到kafka ...

  9. Cocos2d-x数据持久-变更数据

    当数据变化,参与SQL报表insert.update和delete声明.这项3个月SQL语句可以带参数. 详细过程的数据,例如,下面的变化看出.(1) 采用sqlite3_open开放式数据库功能.( ...

随机推荐

  1. Android资源文件及文件夹介绍

    在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的 1:assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片, ...

  2. PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区

    PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区 PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具

  3. Opencv246+vs2012生成不依赖编译环境的exe文件

    我们都知道,vs2012编译项目有两个版本号:Debug和Release,这里我们在Release下生成exe文件,为什么要在Release以下生成呢,原因是你在Debug模式下生成的exe须要vs2 ...

  4. 开发腾讯移动游戏平台SDK Android版Ane扩展 总结

    本文记录了在开发 腾讯移动游戏平台SDK(MSDK) Android版Ane扩展 过程中所遇到的问题和相关解决方式 问题一:编译报错:Unable to resolve target 'android ...

  5. Linux下Apache PHP Mysql默认安装路径

    Apache 假设採用RPM包安装.安装路径应在 /etc/httpd文件夹下 Apache配置文件: /etc/httpd/conf/httpd.conf Apache模块路径: /usr/sbin ...

  6. 在ireport中使用checkbox

    在网上搜索了很多实现checkbox的办法, 主要是利用打钩图片实现. 下面是我的做法,也不怎么高明, 不过比利用图片好. 后台 map.put("lifeTimePartFlag" ...

  7. 【ArcGIS 10.2新特性】ArcGIS 10.2 for Server新特性

    ArcGIS forServer相关的很多重大消息,如与Portal for ArcGIS进行了集成,提供对实时数据支持.离线地图使用. 1.与Portal for ArcGIS集成 用户能够配置Po ...

  8. 前后端分离Web项目中,RBAC实现的研究

    在前后端分离Web项目中,RBAC实现的研究   最近手头公司的网站项目终于渐渐走出混沌,走上正轨,任务也轻松了一些,终于有时间整理和总结一下之前做的东西. 以往的项目一般使用模板引擎(如ejs)渲染 ...

  9. Java使用反射机制优化工厂方法

    我先举个例子,有一个接口People,这个接口有一个方法: package com.wjy.reflect; public interface People { public abstract voi ...

  10. 什么样的企业造什么样的软件最easy成功?

    事件1: 一般软件企业按功能分,大体分业务应用型软件和系统工具型软件. 按市场分,应用型软件企业较多,直接贴近生活:系统工具类较少,间接贴近大众较少. 事件2: 软件企业中,当中中小型企业老板存在非常 ...