UITableViewController用于选择一个对象

时间:2014-09-07 09:15:38

标签: ios objective-c xcode ios7

目前我有一个带有静态单元格的UITableViewController,其作用类似于用户输入的表单。有一个单元格具有给定数量的条目。可以通过单击单元格在另一个UITableViewController中选择此条目。以编程方式从类" EventType"中选择一个对象。选择一个条目时,应将此对象转发到第一个UITableViewController。 我能够调用第二个UITableViewController并通过调用它来解除它:

[self dismissViewControllerAnimated:YES completion:nil];

我的问题是我不知道如何将对象转发到第一个UIViewController,之后我想用对象的属性更新单元格中的标签。

1 个答案:

答案 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。

The source