0

单击按钮后,我将数据从 FirstView 传输到 SecondView。

FirstView.h
@property (strong, nonatomic) NSString  *stringOfFirstView; 
FirstView.m

 - (void)pushToSecond {
         SecondView *controller   =   [[SecondView alloc] initWithNibName:@"SecondView" bundle:nil];
         controller.stringOfSecondView          =   self.stringOfFirstView;
         [self.navigationController pushViewController:controller animated:NO];

        }

在 SecondView 中,我有

SecondView.h
    @property (strong, nonatomic) NSString  *stringOfSecondView; 

在 SecondView,我的目标是通过单击后退按钮返回 FirstView,并且也想分配stringOfSecondViewstringOfFirstView

问题 :

How can I assign stringOfSecondView to stringOfFirstView via clicking back button.

只是让你知道,我正在检测 SecondView 中的后退按钮上的点击事件,方法是

SecondView.m
- (void) viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:YES];
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound)
        NSLog(@"will show onto console");  

} 

但是我被卡住了如何将数据传回

如果您对此问题有任何线索,请提出建议。

4

4 回答 4

2

我会使用代表。因此,在您的 SecondView 中,您需要创建一个将数据发送回您的 FirstView 的协议。您的 FirstView 将成为 SecondView 的代表。有大量关于如何制作委托的教程。

于 2012-07-23T19:16:36.497 回答
0

基本上你有2个选择:

  1. secondView:持有参考firstView
  2. 更灵活的选择:如果您可能想要重用该功能,请定义一个协议。让我们firstView实现这个协议,并让我们firstView成为代表 secondView

在这两种情况下,secondView都会有一个分配/弱属性,它存储对firstView. 并将firstView实现一个方法,该方法接收一个 NSString 并将其存储在stringOfFirstView

于 2012-07-23T19:21:03.400 回答
0

不要将其视为通过单击后退按钮进行分配可能会有所帮助。本质上,当您单击后退按钮时,您的 FirstView 将重新获得控制权。在它重新获得控制权时,您可以简单地向 SecondView 询问 stringOfSecondView 的值并将其存储在您喜欢的任何位置,例如在 stringOfFirstView 中。

为了向 SecondView 询问此信息,您可能希望通过将 SecondView 的 ID 存储在 FirstView 的实例变量中来“记住”SecondView 是谁。另外,如果您不进行自动引用计数,请记住正确保留和释放它。

于 2012-07-23T19:21:59.283 回答
0

只是为了补充 ttran 的答案,您可以在这里查看:http: //mobiledevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html

基本思想是创建一个协议(在其中定义应该由采用此协议的类实现(可选或不实现)的方法。这意味着您的 FirstViewController 可以采用协议,因此您的 SecondViewController 可以知道一些方法第一个视图控制器有。

因此,缺少的部分是第二个视图控制器需要引用第一个视图控制器。您可以通过委托来做到这一点(委托通常是一个弱属性)。

同样,您可以通过阅读协议和委托的基础知识来了解更多信息并理解此过程。

于 2012-07-23T19:22:16.223 回答