我试图将一个对象传递给我在故事板中创建的静态分组表视图.
这是我在第一个视图中用来推送第二个视图的代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Row Selected");
CustomerDetailTableViewController *detailView = [[self storyboard] instantiateViewControllerWithIdentifier:@"DetailsView"];
detailView.customer = [self.fetchedResultsController objectAtIndexPath:[self.tableView indexPathForSelectedRow]];
NSLog(@"%@",detailView.customer.firstName);
[self.navigationController pushViewController:detailView animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
firstName的NSlog是正确的,但是当推送详细信息视图时,detailView中的单元格为空.我可能只是缺少一些愚蠢的东西,但是一双新鲜的眼睛会非常感激.
以下是detailView控制器的代码:
CustomerDetailTableViewController.h
@class Customer;
#import <UIKit/UIKit.h>
@interface CustomerDetailTableViewController : UITableViewController{
Customer *customer;
UILabel *fullName;
UILabel *address;
UILabel *homePhone;
UILabel *cellPhone;
UILabel *email;
}
@property (nonatomic, strong) IBOutlet UILabel *fullName;
@property (nonatomic, strong) IBOutlet UILabel *address;
@property (nonatomic, strong) IBOutlet UILabel *homePhone;
@property (nonatomic, strong) IBOutlet UILabel *cellPhone;
@property (nonatomic, strong) IBOutlet UILabel *email;
@property (nonatomic, strong) Customer *customer;
@end
Run Code Online (Sandbox Code Playgroud)
CustomerDetailTableViewController.m
#import "CustomerDetailTableViewController.h"
#import "Customer.h"
@implementation CustomerDetailTableViewController
@synthesize fullName, address, homePhone, cellPhone, email, customer;
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
fullName = [NSString stringWithFormat:@"%@ %@", customer.firstName, customer.lastName];
address = [NSString stringWithFormat: @"%@/n%@, %@ %@", customer.address, customer.city, customer.state, customer.zipCode];
[super viewDidLoad];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end
Run Code Online (Sandbox Code Playgroud)
Mat*_*nna 12
那么,您是否已经使用故事板创建了两个视图(第一个TableView和CustomerDetailTableViewController)?在这种情况下,您必须单击两个视图之间的连接线到故事板中,并将"标识符"字段设置为"故事板Segue"部分,类似于"setCustomer".这是一个截图:这里有一个小截图:

之后,您可以在第一个TableView上注释方法tableView:didSelectRowAtIndexPath:并替换为此方法:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"setCustomer"]) {
CustomerDetailTableViewController *customerDetailVC = (CustomerDetailTableViewController *)[segue destinationViewController];
customerDetailVC.customer = [self.fetchedResultsController objectAtIndexPath:[self.tableView indexPathForSelectedRow]];
}
}
Run Code Online (Sandbox Code Playgroud)
记得包括
#include "CustomerDetailTableViewController.h"
Run Code Online (Sandbox Code Playgroud)
在实现文件的顶部.
我希望这有帮助!
| 归档时间: |
|
| 查看次数: |
3958 次 |
| 最近记录: |