我想将一些变量从我的ViewController传递到我的TableViewController,在那里可以显示它们。例如,假设我想传递一个字符串firstName:
ViewController.m
- (IBAction)addToListPressed:(id)sender {
TableViewController *tableController = [[TableViewController alloc] init];
tableController.firstName = @"Alice";
[self.navigationController pushViewController:tableController animated:YES];
}
TableViewController.h
@interface TableViewController : UITableViewController
@property NSString *firstName;
@end
TableViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"First name: %@", self.firstName);
}
我得到的输出是名字:(null)如何正确访问名称?
答案 0 :(得分:0)
我实际上已将您的代码添加到我的项目中,因为我很好奇,并且它运行没有问题。我把它包含在github项目中注释掉了。享受!
我在这里创建了一个github repo:https://github.com/Rnorback/sample-segue-code,它将向您展示如何为将来设置viewcontroller和tableview。
我将此代码添加到ViewController.m:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
if ([segue.identifier isEqualToString:@"tableViewSegue"]) {
TableViewController *tableVC = [segue destinationViewController];
tableVC.firstName = @"Alice";
}
}
我将此代码添加到ViewController.m中的按钮操作:
[self performSegueWithIdentifier:@"tableViewSegue" sender:self];
要设置此项目,我完全按照以下描述进行操作:
然后在它们之间进行控制 - 拖动以创建一个segue并选择show:
如果有帮助,请告诉我。
答案 1 :(得分:-1)
如果您不打算允许外部课程阅读您的表格视图的名字,请将其移到实施文件中,如下所示:
<强> TableViewController.m 强>
@interface TableViewController ()
@property (nonatomic, strong) NSString *firstName;
@end
- (id)initWithFirstName:(NSString *)iFirstName {
if (self = [super init]) {
self.firstName = iFirstName;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"First name: %@", self.firstName);
}
然后像这样打电话给你TableViewController
:
- (IBAction)addToListPressed:(id)sender {
TableViewController *tableController = [[TableViewController alloc] initWithFirstName:@"Alice")];
[self.navigationController pushViewController:tableController animated:YES];
}
编辑:发表评论
我相信这是关于在内存中加载正确对象的全部内容。如果你是通过故事板进行的,那么从你的视图控制器(点按按钮时传递名字)将segue拖到你的UITableViewController
。请看一下这个Apple Documentation如何在故事板中做到这一点。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
TableViewController *myTableController = (TableViewController *)segue.destinationViewController;
myTableController.firstName = @"Alice";
}
然后不要像我之前建议的那样实现initWithFirstName:
方法。让你的TableViewController.h
看起来像这样。
@interface TableViewController : UITableViewController
@property (nonatomic, strong) NSString *firstName;
@end