【发布时间】:2014-05-28 03:30:56
【问题描述】:
所以我有一个基本的应用程序,这是它的工作原理。我有一个名为 A 的根视图控制器和一个名为 B 的表视图控制器。当用户在 B 中选择一行时,我会弹回到根视图控制器 A。
我要做的是将被选为 NSString 的行的数据传回根视图控制器 A。然后根据字符串使用此字符串“做某事”。
我尝试过使用 NSNotification 方法,但是我无法使用该字符串来做某事。
这是我尝试过的:
//tableViewB.m
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[[NSNotificationCenter defaultCenter] postNotificationName:@"passData" object:[[_objects objectAtIndex:indexPath.row] objectForKey:@"title"]];
[self.navigationController popToRootViewControllerAnimated:YES];
}
//rootViewA.m
-(void)dataReceived:(NSNotification *)noti
{
NSLog(@"dataReceived :%@", noti.object);
}
-(void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataReceived:) name:@"passData" object:nil];
}
我想要做的更像是你在推送 viewController 并使用 perpareForSegue 方法时可以做的事情。
提前感谢您的帮助。
【问题讨论】:
-
除了发布的其他答案之外,您还可以使用 unwind segue 返回而不是 popToRootViewController,这样您就可以像使用 forward segue 一样使用 prepareForSegue。
-
@rdelmar 我将如何在 didSelectRowAtIndexPath 方法中使用它?
-
您可以像手动调用任何其他 segue 一样执行此操作 - 为您的 segue 提供一个标识符,然后调用 performSegueWithIdentifier:sender:。您也可以直接从单元格连接展开转场,在这种情况下,您根本不应该实现 didSelectRowAtIndexPath。
-
@rdelmar 所以你说有一个从 TableView B 到根 A 的推送序列,然后在 didSelectRowAtIndexPath 方法中调用 performSegueWithIdentifier:sender: ?
-
不,不是 push segue,是 unwind segue。如果您从控制器 (B) 连接它,那么您将在 didSelectRowAtIndexPath 方法中调用 performSegueWithIdentifier:sender:,但如果您直接从单元格连接 segue,那么您不需要调用任何东西。
标签: ios objective-c uistoryboardsegue rootview poptoviewcontroller