如何将字符串从根视图控制器传递到另一个视图?

Posted

技术标签:

【中文标题】如何将字符串从根视图控制器传递到另一个视图?【英文标题】:How Do I Pass a NSSString from RootViewController to another View? 【发布时间】:2011-09-02 22:18:38 【问题描述】:

我正在编写一个 iphone 应用程序,该应用程序从第一视图 (RootViewController) 获取用户输入,然后它需要将输入传递给“结果”视图控制器,这是另一个使用输入来查询服务器的视图,解析JSON 字符串并在UITableView 中显示结果。我被困在如何将这些字符串(来自RootViewController 上的用户输入)“发送”到第二个 ViewController...任何想法?

提前谢谢

斯蒂芬

【问题讨论】:

【参考方案1】:

有三种方法可以做到这一点,具体取决于视图的设置方式。

首先,您可以使用NSNotificationCenter 发布字符串通知。另一个视图将注册为通知的观察者,并可以在发布时收集信息。

其次,如果第二个视图控制器由第一个呈现,即您分配/初始化 VC 并使用导航控制器呈现它,您可以在第二个 VC 中创建一个属性并从根目录设置它。在第二个 VC 的标头中,您将创建以下内容:

NSString *someString;

@property (nonatomic, retain) NSString *someString;

然后在实现文件中@synthesize someString;。这样做可以让您在显示视图之前设置值。

最后,如果视图不相关,例如第二个 VC 不是由根提供的,您将创建一个从根到第二个 VC 的 IBOutlet。假设您已像上一个解决方案一样设置了属性,您将调用类似于 self.secondVC.someString = myStringToPass;

的内容

希望其中之一有所帮助

编辑:意识到我已经注释掉了指向 NSNotificationCenter 的链接....哎呀

【讨论】:

我的荣幸。总是乐于助人【参考方案2】:

在第二个视图控制器中,创建一个 NSString 实例来接收值并在您要显示此控制器时设置它,例如在tableView:didSelectRowAtIndexPath: 方法中。 RootViewController.h

@interface RootViewController : UITableViewController

    NSString *stringToPass;


@property (nonatomic, retain) NSString *stringToPass;

@end

RootViewController.m

#import "SecondViewController.h"

@implementation RootViewController

@synthesize stringToPass;

// Other code goes here...

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    // for example first cell of first section
    if (indexPath.section == 0 && indexPath.row == 0)
    
        SecondViewController *second = [[SecondViewController alloc] initWithStyle:UITableViewStyleGrouped];
        // here you pass the string
        second.receivedString = self.stringToPass;
        [self presentModalViewController:second animated:YES];
        [second release];
    

@end

SecondViewController.h

@interface SecondViewController : UITableViewController

    NSString *receivedString;


@property (nonatomic, retain) NSString *receivedString;

@end

SecondViewController.m

@implementation SecondViewController

@synthesize receivedString;

// methods to use the string goes here

@end

我还没有测试过这段代码...我已经写了记住它:)

【讨论】:

【参考方案3】:

子类化第二个视图控件并编写自定义的 init 方法。

-(id)initWithMyCustomValueString:(NSString*)string;

并将您的数据传递给它。


确保在 secondViewController 上创建 iVar 或属性以从中读取数据。

【讨论】:

有效,但丑陋。我同意为字符串设置一个属性,但是如果一个对象正在创建另一个对象,它也可以调用一个普通的初始化程序,然后在对象上设置属性。

以上是关于如何将字符串从根视图控制器传递到另一个视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从表视图传递到另一个视图控制器

使用推送视图控制器时如何将 Uiimage 从一个视图控制器传递到另一个视图控制器?

如何将不同的数据从表视图传递到另一个视图控制器

如何以编程方式将数据从表视图控制器传递到另一个控制器? [复制]

当数据从一个视图控制器传递到另一个视图控制器时,我如何能够传递图像?

Extjs 7,如何使用视图模型将动态数据从一个控制器传递到另一个控制器