目前我有一个带有静态单元格的UITableViewController,其作用类似于用户输入的表单。有一个单元格具有给定数量的条目。可以通过单击单元格在另一个UITableViewController中选择此条目。以编程方式从类" EventType"中选择一个对象。选择一个条目时,应将此对象转发到第一个UITableViewController。 我能够调用第二个UITableViewController并通过调用它来解除它:
[self dismissViewControllerAnimated:YES completion:nil];
我的问题是我不知道如何将对象转发到第一个UIViewController,之后我想用对象的属性更新单元格中的标签。
答案 0 :(得分:0)
如何传回数据?
如果我们想将数据从SecondViewController传递回FirstViewController,我们需要使用协议和委托。为此,我们必须使FirstViewController成为SecondViewController的委托。如果我们这样做,它允许SecondViewController将消息发送回FirstViewController,从而使我们能够发回数据。
如果FirstViewController必须是SecondViewController的委托,它必须符合SecondViewController的协议。我们必须确保正确指定协议。这告诉FirstViewController需要实现哪些方法。
在SecondViewController.h中,在所有#import语句之后,但在@interface行之前,我们需要指定协议,如下所示:
@class SecondViewController; @protocol SecondViewControllerDelegate <NSObject> - (void)addItemViewController:(SecondViewController *)controller didFinishEnteringItem:(NSString *)item; @end
接下来,仍然在SecondViewController.h中,您需要设置一个委托属性并在SecondViewController.m中进行合成,如下所示:
@property (nonatomic, weak) id <SecondViewControllerDelegate> delegate;
在SecondViewController中,当我们弹出视图控制器时,我们在委托上调用一条消息。
NSString *itemToPassBack = @"This value is going back to FirstViewController"; [self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack];
这就是SecondViewController。现在在FirstViewController.h中,告诉FirstViewController导入SecondViewController并遵守其协议。
#import "SecondViewController.h" @interface FirstViewController : UIViewController <SecondViewControllerDelegate>
在FirstViewController.m中,从我们的协议中实现以下方法:
- (void)addItemViewController:(SecondViewController *)controller didFinishEnteringItem:(NSString *)item { NSLog(@"This was returned from SecondViewController %@",item); }
现在,我们需要做的就是告诉SecondViewController,在我们将SecondViewController推送到导航堆栈之前,FirstViewController是它的委托。在FirstViewController.m中添加以下更改:
SecondViewController *secondViewController = [[SecondViewController alloc] initWithNib:@"SecondViewController" bundle:nil]; secondViewController.delegate = self [[self navigationController] pushViewController:secondViewController animated:YES];
就是这样!您现在设置为将数据从SecondViewController发送到FirstViewController。