暂时先贴代码,其他的全部写完在补充!
#import "BIDSecondLevelViewController.h"
@interface BIDDisclosureButtonController : BIDSecondLevelViewController
@property (strong,nonatomic) NSArray *list;
@end
#import "BIDDisclosureButtonController.h"
#import "BIDAppDelegate.h"
#import "BIDDisclosureDetailController.h"
//这种声明的类别方式称为类扩展(class extension)
@interface BIDDisclosureButtonController()
@property (strong,nonatomic) BIDDisclosureDetailController *childController;
@end
@implementation BIDDisclosureButtonController
@synthesize list;
@synthesize childController;
-(void)viewDidLoad
{
[super viewDidLoad];
NSArray *array=[[NSArray alloc] initWithObjects:@"Toy Story",@"A Bus's Life",@"Toy Story 2",@"Monsters,Inc.",@"Finding Nemo",@"The Incredibles",@"Cars",@"Ratatouile",@"WALL-E",@"Up",@"Toy Story 3",@"Cars 2",@"Brave",nil];
self.list=array;
}
-(void)viewDidUnload
{
[super viewDidUnload];
self.list=nil;
self.childController=nil;
}
#pragma mark -
#pragma mark Table Data Source Methods
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.list count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *DisclosureButtonCellIdentifier= @"DisclosureButtonCellIdentifier";
UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:DisclosureButtonCellIdentifier];
if (cell==nil) {
cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:DisclosureButtonCellIdentifier];
}
NSInteger row=[indexPath row];
NSString *rowString=[list objectAtIndex:row];
cell.textLabel.text=rowString;
cell.accessoryType=UITableViewCellAccessoryDetailDisclosureButton;
return cell;
}
#pragma mark -
#pragma mark Table Detegate Methods
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Hey,do you see the disclosure button?" message:@"If you're trying to drill down,touch that instead" delegate:nil cancelButtonTitle:@"Won't happen again" otherButtonTitles:nil];
[alert show];
}
-(void) tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
if (childController==nil) {
childController=[[BIDDisclosureDetailController alloc] initWithNibName:@"BIDDisclosureDetail" bundle:nil];
}
childController.title=@"Disclosure Button Pressed";
NSUInteger row=[indexPath row];
NSString *selectedMovie=[list objectAtIndex:row];
NSString *detailMessage=[[NSString alloc] initWithFormat:@"You Pressed the disclosure button for %@",selectedMovie];
childController.message=detailMessage;
childController.title=selectedMovie;
[self.navigationController pushViewController:childController animated:YES];
}
@end
#import <UIKit/UIKit.h>
@interface BIDDisclosureDetailController : UIViewController
@property (strong,nonatomic) IBOutlet UILabel *label;
@property (copy,nonatomic) NSString *message;//这里使用copy可能存在的可变的字符串
//这里要注意一个延迟加载的概念,也就是说只有当我们调用改页面时,才会把这些数据显示出来。
@end
#import "BIDDisclosureDetailController.h"
@implementation BIDDisclosureDetailController
@synthesize label;
@synthesize message;
-(void)viewWillAppear:(BOOL)animated//viewDidload只在第一次加载的时候被调用,如果使用viewDidload来处理,该视图将只在BIDDisclosureDetailCintroller视图第一次出现的时候得到更新,在第二次选取Pixar按钮时。我们仍会看到来自第一个按钮的详细信息。
{
label.text=message;
[super viewWillAppear:animated];
}
-(void)viewDidUnload
{
[super viewDidUnload];
self.label=nil;
self.message=nil;
}
@end
BIDCheckListController.h
#import "BIDSecondLevelViewController.h"
@interface BIDCheckListController : BIDSecondLevelViewController
@property (strong,nonatomic) NSArray *list;
@property (strong,nonatomic) NSIndexPath *lastIndexPath;
@end
#import "BIDCheckListController.h"
@implementation BIDCheckListController
@synthesize list;
@synthesize lastIndexPath;
-(void) viewDidLoad
{
[super viewDidLoad];
NSArray *array=[[NSArray alloc] initWithObjects:@"Who Hash",@"Bubba Gump Shrimp Etouffee",@"Who Pudding",@"Scooby Snacks",@"Everlasting Gobstopper",@"Green Eggs and Hams",@"Sonlent Green",@"Hard Tack",@"Lembas Bread",@"Roast Beast",@"Blancmange", nil];
self.list=array;
}
-(void) viewDidUnload
{
[super viewDidUnload];
self.list=nil;
self.lastIndexPath=nil;
}
#pragma mark -
#pragma mark Table Data Source Methods
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.list count];
}
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CheckMarkCellIdentifier=@"CheckMarkCellIdentifier";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:CheckMarkCellIdentifier];
if (cell==nil) {
cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CheckMarkCellIdentifier];
}
NSInteger row=[indexPath row];
NSInteger oldRow=[lastIndexPath row];
cell.textLabel.text=[list objectAtIndex:row];
cell.accessoryType=(row==oldRow && lastIndexPath!=nil)?UITableViewCellAccessoryCheckmark:UITableViewCellAccessoryNone;
return cell;
}
#pragma mark -
#pragma mark Table Delegate Methods
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
int newRow =[indexPath row];
int oldRow=(lastIndexPath !=nil)?[lastIndexPath row]:-1 ;
if (newRow!=oldRow) {
UITableViewCell *newCell=[tableView cellForRowAtIndexPath:indexPath];
newCell.accessoryType=UITableViewCellAccessoryCheckmark;
UITableViewCell *oldCell=[tableView cellForRowAtIndexPath:lastIndexPath];
oldCell.accessoryType=UITableViewCellAccessoryNone;
lastIndexPath=indexPath;
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
@end