这是我的代码。问题是标题没有传递给PinTableViewController。
从我原来的观点来看:
NSString *title = @"testing123";
UIStoryboard *tableViewStoryboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
UINavigationController *navController = [tableViewStoryboard instantiateViewControllerWithIdentifier:@"pinStoryboard"];
PinTableViewController *pinController = (PinTableViewController *)[self.navigationController.viewControllers objectAtIndex:0];
pinController.pinTitleID = title;
[self presentViewController:navController animated:YES completion:nil];
PinTableViewController:
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"test";
}
我在这里做错了什么?如何将数据传递给PinTableViewController?
答案 0 :(得分:4)
您正确实例化导航控制器,但之后您尝试通过引用self.navigationController来访问其根视图控制器,但这些是不同的视图控制器。您需要访问新导航控制器的根视图。这是更新的行
PinTableViewController *pinController = (PinTableViewController *)[navController.viewControllers objectAtIndex:0];
答案 1 :(得分:0)
也许这可能很复杂但你可以发出通知来分配价值。
在你的PinTableViewController中。把这行代码
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(assignTitle:) name:@"AssignTitle" object:nil];
仍然在你的PinTableViewController中编写这个函数
-(void)assignTitle:(NSNotification *)notification
{
NSDictionary *getTitle=[notification userInfo];
self.title (or whatever you want to assign the title to) = [getTitle objectForKey:@"Title"];
}
现在从原始视图
NSString *title = @"testing123";
UIStoryboard *tableViewStoryboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
UINavigationController *navController = [tableViewStoryboard instantiateViewControllerWithIdentifier:@"pinStoryboard"];
NSMutableDictionary *titleToSend=[[NSMutableDictionary alloc] init];
[titleToSend setObject:title forKey:@"Title"];
[self presentViewController:navController animated:YES completion:^{[[NSNotificationCenter defaultCenter] postNotificationName:@"AssignTitle" object:self userInfo:titleToSend]; }];