2011-09-02 79 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

相關問題