2011-09-02 47 views
0

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

Thx提前

斯蒂芬

回答

4

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

首先,您可以使用NSNotificationCenter发布字符串的通知。另一种观点将作为通知的观察员注册,并可以在发布信息时收集信息。其次,如果第二个视图控制器由第一个视图控制器呈现,即您将alloc/init VC分配给它并将其显示为一个导航控制器,则可以在第二个VC中创建一个属性并从根目录中对其进行设置。在第二VC的头,你会创建以下文件:在实现文件

NSString *someString; 

@property (nonatomic, retain) NSString *someString; 

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

最后,如果视图不相关,如第二个VC不是由根提供的那样,您将创建一个从根到第二个VC的IBOutlet。假设你已经在过去的解决方案来设置喜欢的属性,你会叫的东西沿着self.secondVC.someString = myStringToPass;

行希望那些人帮助

编辑:意识到我有注释掉的链接NSNotificationCenter .... oops

+0

Thx帮忙! – Steve

+0

我的荣幸。总是乐于帮助 – justin

1

子类的第二视图的控制和写自定义的初始化方法。

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

并将您的数据传递给它。


确保您在secondViewController上创建了一个iVar或属性来读取数据。

+0

作品,但丑陋。我同意拥有字符串的属性,但是如果一个对象正在创建另一个对象,那么可能只需调用一个普通的初始化器,然后在该对象上设置属性。 – Abizern

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。米

@implementation SecondViewController 

@synthesize receivedString; 

// methods to use the string goes here 

@end 

我还没有测试此代码...我已经写了回忆吧:)

+0

Thx帮助! – Steve

+0

不客气;) – matteodv

相关问题