如何将字符串从根视图控制器传递到另一个视图?
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 从一个视图控制器传递到另一个视图控制器?
如何以编程方式将数据从表视图控制器传递到另一个控制器? [复制]