【问题标题】:UITableViewController used to select an objectUITableViewController 用于选择一个对象
【发布时间】:2014-09-07 09:15:38
【问题描述】:

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

[self dismissViewControllerAnimated:YES completion:nil];

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

【问题讨论】:

    标签: ios objective-c xcode ios7


    【解决方案1】:

    如何将数据传回?

    如果我们想将数据从 SecondViewController 传递回 FirstViewController,我们需要使用协议和委托。为此,我们必须让 FirstViewController 成为 SecondViewController 的代表。如果我们这样做,它允许 SecondViewController 将消息发送回 FirstViewController,从而使我们能够发送回数据。

    如果 FirstViewController 必须是 SecondViewController 的委托,它必须符合 SecondViewController 的协议。我们必须确保正确指定协议。这告诉 FirstViewController 它需要实现哪些方法。

    在 SecondViewController.h 中,在所有 #import 语句之后,但在 @interface 行之前,我们需要指定协议,如下所示:

    @class SecondViewController;
    @protocol SecondViewControllerDelegate 
    - (void)addItemViewController:(SecondViewController *)controller didFinishEnteringItem:(NSString *)item;
    @end

    接下来,仍然在 SecondViewController.h 中,您需要设置一个委托属性并在 SecondViewController.m 中进行合成,如下所示:

    @property (nonatomic, weak) id  委托;

    在 SecondViewController 中,当我们弹出视图控制器时,我们会在委托上调用消息。

    NSString *itemToPassBack = @"这个值返回到FirstViewController";
    [self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack];

    SecondViewController 就是这样。现在在 FirstViewController.h 中,告诉 FirstViewController 导入 SecondViewController 并遵守它的协议。

    #import "SecondViewController.h"
    @interface FirstViewController : UIViewController 

    在 FirstViewController.m 中,从我们的协议中实现以下方法:

    - (void)addItemViewController:(SecondViewController *)controller didFinishEnteringItem:(NSString *)item
    {
        NSLog(@"这是从 SecondViewController 返回的 %@",item);
    }

    现在,我们需要做的就是在将 SecondViewController 推送到导航堆栈之前告诉 SecondViewController FirstViewController 是它的委托。在 FirstViewController.m 中添加以下更改:

    SecondViewController *secondViewController = [[SecondViewController alloc] initWithNib:@"SecondViewController" bundle:nil];
    secondViewController.delegate = self
    [[self navigationController] pushViewController:secondViewController 动画:YES];

    就是这样!您现在可以将数据从 SecondViewController 发送到 FirstViewController。

    The source

    【讨论】:

    • 感谢您的详细描述。它对我来说非常有效。
    • 欢迎您,很高兴帮助到您
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2010-09-05
    • 2015-11-10
    相关资源
    最近更新 更多