这次的学习是在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
保存文件,打开ViewController.xib文件, 在view中添加一个Table view控件,
将delegate和dataSource连接到File‘s Owner图标。
接着添加两个Button控件,将add和edit连接到File‘s owner图标上,保存文件运行:
运行程序:
程序运行
当点击Edit编辑,进入编辑视图。
用户可以删除数据或者调整顺序。
点击Add进行添加一行。
引自:其他,作为分享
TableViewCell,TableView,UITableViewCell