iphone – Xcode如何将UITableView Cells链接到新的View Control
发布时间:2020-12-14 17:31:12 所属栏目:百科 来源:网络整理
导读:我目前已经开发了一个基于标签的应用程序.第一个Tab是decors,它在TableView结构中显示Color Swatches或 Images.当前推送图像或颜色样本时会弹出一个警告,说明您推送的表格单元格.我想要将每个表格单元格图像或颜色样本链接到一个新的视图控制器,显示该图像或
|
我目前已经开发了一个基于标签的应用程序.第一个Tab是decors,它在TableView结构中显示Color Swatches或
Images.当前推送图像或颜色样本时会弹出一个警告,说明您推送的表格单元格.我想要将每个表格单元格图像或颜色样本链接到一个新的视图控制器,显示该图像或色样的更大图像.模态也可以
#import "TableViewsViewController.h"
@implementation TableViewsViewController
#pragma mark -
#pragma mark Synthesizers
@synthesize table;
@synthesize sitesArray;
@synthesize imagesArray;
#pragma mark -
#pragma mark View lifecycle
// Implement viewDidLoad to do additional setup after loading the view,typically from a nib.
- (void)viewDidLoad {
// Load up the sitesArray with a dummy array : sites
NSArray *sites = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",nil];
self.sitesArray = sites;
[sites release];
UIImage *active = [UIImage imageNamed:@"a.png"];
UIImage *ae = [UIImage imageNamed:@"b.png"];
UIImage *audio = [UIImage imageNamed:@"c.png"];
UIImage *mobile = [UIImage imageNamed:@"d.png"];
UIImage *net = [UIImage imageNamed:@"e.png"];
UIImage *photo = [UIImage imageNamed:@"f.png"];
UIImage *psd = [UIImage imageNamed:@"g.png"];
UIImage *vector = [UIImage imageNamed:@"h.png"];
NSArray *images = [[NSArray alloc] initWithObjects: active,ae,audio,mobile,net,photo,psd,vector,nil];
self.imagesArray = images;
[images release];
[super viewDidLoad];
}
#pragma mark -
#pragma mark Table View datasource methods
// Required Methods
// Return the number of rows in a section
-(NSInteger) tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{
return [sitesArray count];
}
// Returns cell to render for each row
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"CellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
// Configure cell
NSUInteger row = [indexPath row];
// Sets the text for the cell
//cell.textLabel.text = [sitesArray objectAtIndex:row];
// Sets the imageview for the cell
cell.imageView.image = [imagesArray objectAtIndex:row];
// Sets the accessory for the cell
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
// Sets the detailtext for the cell (subtitle)
//cell.detailTextLabel.text = [NSString stringWithFormat:@"This is row: %i",row + 1];
return cell;
}
// Optional
// Returns the number of section in a table view
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
#pragma mark -
#pragma mark Table View delegate methods
// Return the height for each cell
-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 78;
}
// Sets the title for header in the tableview
-(NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return @"Decors";
}
// Sets the title for footer
-(NSString *) tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{
return @"Decors";
}
// Sets the indentation for rows
-(NSInteger) tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 0;
}
// This method is run when the user taps the row in the tableview
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Tapped row!"
message:[NSString stringWithFormat:@"You tapped: %@",[sitesArray objectAtIndex:indexPath.row]]
delegate:nil
cancelButtonTitle:@"Yes,I did!"
otherButtonTitles:nil];
[alert show];
[alert release];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
#pragma mark -
#pragma mark Memory management
- (void)didReceiveMemoryWarning {
NSLog(@"Memory Warning!");
[super didReceiveMemoryWarning];
}
- (void)viewDidUnload {
self.table = nil;
self.sitesArray = nil;
self.imagesArray = nil;
[super viewDidUnload];
}
- (void)dealloc {
[table release];
[sitesArray release];
[imagesArray release];
[super dealloc];
}
@end
警报的部分 // This method is run when the user taps the row in the tableview
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Tapped row!"
message:[NSString stringWithFormat:@"You tapped: %@",I did!"
otherButtonTitles:nil];
[alert show];
[alert release];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
解决方法
在didSelectRowAtIndexPath中,您可以只启动另一个视图控制器并显示.您可以从self.navigationController中呈现它,以便在需要时有一个后退按钮.在这里,我展示它以模态呈现:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Deselect row
[tableView deselectRowAtIndexPath:indexPath animated:YES];
// Declare the view controller
UIViewController *anotherVC = nil;
// Determine the row/section on the tapped cell
switch (indexPath.section) {
case 0:
switch (indexPath.row) {
case 0: {
// initialize and allocate a specific view controller for section 0 row 0
anotherVC = [[ViewControllerForRowZeroSectionZero alloc] init];
break;
}
case 1: {
// initialize and allocate a specific view controller for section 0 row 1
anotherVC = [[ViewControllerForRowOneSectionZero alloc] init];
break;
}
}
break;
case 1: {
// initialize and allocate a specific view controller for section 1 ALL rows
anotherVC = [[ViewControllerForAllRowsSectionOne alloc] init];
break;
}
}
// Get cell textLabel string to use in new view controller title
NSString *cellTitleText = [[[tableView cellForRowAtIndexPath:indexPath] textLabel] text];
// Get object at the tapped cell index from table data source array to display in title
id tappedObj = [sitesArray objectAtIndex:indexPath.row];
// Set title indicating what row/section was tapped
[anotherVC setTitle:[NSString stringWithFormat:@"You tapped section: %d - row: %d - Cell Text: %@ - Sites: %@",indexPath.section,indexPath.row,cellTitleText,tappedObj]];
// present it modally (not necessary,but sometimes looks better then pushing it onto the stack - depending on your App)
[anotherVC setModalPresentationStyle:UIModalPresentationFormSheet];
// Have the transition do a horizontal flip - my personal fav
[anotherVC setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
// The method `presentModalViewController:animated:` is depreciated in iOS 6 so use `presentViewController:animated:completion:` instead.
[self.navigationController presentViewController:anotherVC animated:YES completion:NULL];
// We are done with the view controller. It is retained by self.navigationController so we can release it (if not using ARC)
[anotherVC release],anotherVC = nil;
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
