TableViewCell,TableView,UITableViewCell
这次的学习是在Navigation-based Application模板中,用RootViewController class设置操作方法,使用UITableView的属性值。在导航控制器控件为程序的窗口添加上导航条,可构建多个视图连接导航按钮。这次的练习中,我在Navigation controller控件加入两个导航按钮,屏幕左上角Add按钮为表格添加新的一行,右上角Edit按钮为表格删除一行或者移动每行的顺序。当user点击edit按钮后,便会进入到编辑的视图,当user想要回到原先的视图便点击Done完成编辑。
ViewController.m文件
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
{
IBOutlet UITableView *rootTableView;
IBOutlet UIButton *editButton;
NSMutableArray *dataArray;
UITextField *rowField;
}
@property (nonatomic,retain) NSMutableArray *dataArray;
@property (nonatomic, retain) UITextField *rowField;
@property (nonatomic, retain) IBOutlet UITableView *rootTableView;
@property (nonatomic, retain) IBOutlet UIButton *editButton;
@end
ViewController.h文件
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize rootTableView;
@synthesize dataArray;
@synthesize editButton;
@synthesize rowField;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//定义内容文字
dataArray = [[NSMutableArray alloc] initWithObjects:@"Row1", @"Row2",@"Row3",@"Row4",@"Row5",nil];
//建立add按钮
UIBarButtonItem *addButton = [[UIBarButtonItem alloc]
initWithTitle:@"Add"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(AddButtonAction:)];
self.navigationItem.leftBarButtonItem = addButton;
}
//构建操作方法,点击按钮执行
-(IBAction) EditButtonAction:(id)sender
{
// [rootTableView setEditing: YES
// animated: YES];
if ([sender tag] == 1) {
[editButton setTitle:@"Done" forState:UIControlStateNormal];
[editButton setTag:2];
[rootTableView setEditing:YES animated:YES];
}else if ([sender tag] == 2){
[editButton setTitle:@"Edit" forState:UIControlStateNormal];
[editButton setTag:1];
[rootTableView setEditing:NO animated:YES];
}
}
//添加addbutton
-(IBAction)AddButtonAction:(id)sender
{
UIAlertView *dialog = [[UIAlertView alloc] initWithTitle:@"添加一行"
message:@""
delegate:self
cancelButtonTitle:@"取消"
otherButtonTitles:@"确定", nil];
rowField = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 38.0, 245.0, 20.0)];
[rowField setBackgroundColor:[UIColor whiteColor]];
[dialog addSubview:rowField];
[dialog show];
[dialog release];
[rowField release];
}
-(void) alertView: (UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if ((buttonIndex != [alertView cancelButtonIndex]) && (rowField.text != nil)) {
[dataArray insertObject:[rowField text] atIndex:dataArray.count];
[self.rootTableView reloadData];
}
}
//表格中分组
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 2;
}
//表格中行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
//表格中行数等于数组内容的个数
if (section ==0) {
return dataArray.count;
}
if (section ==1)
{
return 0;
}
else {
return 0;
}
}
//分组标题内容设置
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
//创建字符变量title
NSString *title = nil;
switch (section) {
case 0:
title = @"表格一";
break;
case 1:
title = @"表格二";
break;
default:
break;
}
return title;
}
//显示表格每一行内容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
//创建一个字符变量,用于取得文本数据类型
static NSString *CellIndentifier = @"cell";
//建立表格行数单元格
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIndentifier];
//当cell为空时
if (cell == nil)
{
//为cell重新获取表格内容标识符
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIndentifier] autorelease];
}
//分组section为0
if (indexPath.section ==0)
{
cell.textLabel.text =
[dataArray objectAtIndex:indexPath.row];
}
return cell;
}
//编辑
-(BOOL) tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
//调整
-(void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
//删除
[dataArray removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
}
}
//上下行移动
-(void) tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
[dataArray insertObject:[dataArray objectAtIndex:sourceIndexPath.row]
atIndex:destinationIndexPath.row];
[dataArray removeObjectAtIndex:(NSUInteger) sourceIndexPath.row+1];
}
//让表格内容位置调整的方法
-(BOOL) tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
-(void) dealloc
{
[rootTableView release];
rootTableView = nil;
[rowField release];
[dataArray release];
dataArray = nil;
[editButton release];
editButton = nil;
[super dealloc];
}
@end
用户可以删除数据或者调整顺序。
点击Add进行添加一行。
引自:其他,作为分享
TableViewCell,TableView,UITableViewCell的更多相关文章
- Cocos2d-x 学习笔记(22) TableView
[Cocos2d-x 学习笔记 ]目录 1. 简介 TableView直接继承了ScrollView和ScrollViewDelegate.说明TableView能实现ScrollView拖动cont ...
- iOS 学习 - 4.存储聊天记录
主要是用sqlite3来存储聊天记录 先导入sqlite3.dylib, 点 Add Other,同时按住shift+command+G, 在弹出的Go to the folder中输入/usr/li ...
- UITableView多选全选
自定义cell和取到相应的cell就行了 TableViewCell.h #import <UIKit/UIKit.h> @interface TableViewCell : UITabl ...
- iOS开发——UI篇OC篇&UITableView多项选择
UITableView多项选择 自定义cell和取到相应的cell就行了 TableViewCell.h #import <UIKit/UIKit.h> @interface TableV ...
- swift 分页视图
var data:NSArray! var scrollView: UIScrollView! var pageCtrl: UIPageControl! override func viewDidLo ...
- 为UITableViewController瘦身
在IOS开发中采用了MVC得模式,ViewController通常是最庞大的文件,里面包含了各种各样的大概,造成代码的复用率低下,可读性也降低,那么有什么办法来解决这个问题呢. 在创建Table的时候 ...
- IOS开发-表视图LV3导航控制器
学到这里感觉有点难了,其实这篇文章再草稿箱里放了好久了~ 最近对于学习的热情下降了.这不行-抓紧学习走起! 在这一章节的学习中主要针对导航控制器及表视图来建立多视图的应用, 首先要了解一些概念-- 1 ...
- 简化MonoTouch.Dialog的使用
读了一位园友写的使用MonoTouch.Dialog简化iOS界面开发,我来做个补充: 相信使用过DialogViewController(以下简称DVC)的同学都知道它的强大,但是缺点也是明显的,应 ...
- 项目管理之 Objective-C 编码规范
目录: 一.格式化代码 二.命名 命名要求 1. 类的命名: 规则: 大驼峰命名法,每个单词的首字母都采用大写字母.一般添加业务前缀.后缀一般是当前类的种类. ViewController:后缀:Vi ...
随机推荐
- BZOJ4724 [POI2017]Podzielno
4724: [POI2017]Podzielno Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 77 Solved: 37[Submit][Stat ...
- [BZOJ 3218]a + b Problem
又是一道主席树优化网络流的好题 按约大爷的教导,源点为白,汇点为黑,搞成最小割 发现暴力连边要爆炸,但是要连的点在线段树中都构成了一个区间,果断主席树优化之 为什么不用一般线段树? 因为要满足 j&l ...
- Python之路,day5-Python基础
for#列表生成式 data = [1,2,3,4,5,6,7] #####列表生成式 #data = [i+1 for i in data] data = [i*2 if i>5 else i ...
- vim中添加多行注释和删除多行注释
1.多行注释: a. 按下Ctrl + v,进入列模式; b. 在行首选择需要注释的行; c. 按下"I",进入插入模式: d. 然后输入注释符("//&q ...
- k8s DNS 服务发现的一个坑
按照官当文档,以及大家的实践进行k8s dns 服务发现搭建还是比较简单的,但是会有一个因为系统默认dns 配置造成的一个问题 1. linux 默认dns 配置在 /etc/resolv.conf ...
- mybatis与 Exception
mybatis将所有的异常全部包成了运行时异常,减少在高层代码中频繁的try-catch导致的代码臃肿问题.Persistence是它们共有的父类,继承自RuntimeException非检查型异常. ...
- backbone学习总结(一)
入职第三天,新公司项目用到backbone+underscore+require等框架,前两天把项目的开发环境都配置好啦,项目也能跑起来,现在准备好好学习公司自己的框架以及用到的框架,有点想吐槽,开发 ...
- VirtualBox后台运行虚拟机(无图形界面启动虚拟机)
有时候可能会用虚拟机搭建集群,这是通常希望不现实图形界面,试了半天,似乎只有Virtual Box支持无图形界面运行虚拟机,方法如下: 在Virtual Box的安装目录中找到VBoxManage,M ...
- MySQL concat函数的使用
MySQL concat函数是MySQL数据库中众多的函数之一,下文将对MySQL concat函数的语法和使用进行说明,供您参考和学习. MySQL concat函数使用方法:CONCAT(str1 ...
- Azure
ylbtech-Miscellaneos:Azure A,返回顶部 1, Windows Azure是微软基于云计算的操作系统,现在更名为“Microsoft Azure”,和Azure Servic ...