2013-09-24 100 views
1

我完全陌生於目標c和ios開發,我只是試圖導航到故事板上的新場景,並且在導航時更改了UIlabel的文本。如何在場景之間傳遞信息目標c

我有這個設置的方式是我有一個視圖控制器和一個tableview控制器,每個都有自己的頭文件和實現文件。我從視圖控制器上的按鈕使用segue導航到tableview。

我看過這個堆棧溢出後(How do I pass information between storyboard segues?),它解釋瞭如何通過值在賽格瑞,並已實現了它這樣:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 

    NSLog(@"prepareForSegue: %@", segue.identifier); 
    if([segue.identifier isEqualToString:@"navtotablebut"]) 
    { 
     TableViewController *testcontroller = segue.destinationViewController; 
     testcontroller.testpass.text = @"Testing123"; 


     NSLog(@"%@",[NSString stringWithFormat:@"testpass has been changed to %@",  testcontroller.testpass.text]); 
    } 
} 

日誌驗證此賽格瑞方法不會被調用,它能夠正確識別我給它的id(navtotablebut)。然後我嘗試在我的tableview控制器上將我的UIlabel的文本屬性的值設置爲一個簡單的字符串「Testing123」。然而,這個改變不僅沒有反映在新的屏幕上,而且我的打印語句似乎認爲testcontroller.testpass.text等於(null)。

我在這裏做了什麼可怕的錯誤?

+0

你有沒有創建testpass的屬性? –

+0

是的,在我的TableViewController.h我有這個: @property(強,非原子)IBOutlet UILabel * testpass; – Bebhead

回答

2

在繪製「TableViewController」的視圖之前,將testcontroller的值設置爲TableViewController

請注意:如果使用Autolayout,請更新viewdidLoadviewDidLayoutSubviews中的視圖。

最好的方法是將您的值作爲字符串傳遞給其他視圖控制器,然後填充。

+0

那麼,我基本上採取karthika在我的TableViewController上創建一個NSString屬性的方法,填充它,然後在viewdidLoad方法上,當我去並將UILabel.text分配給字符串? 爲什麼註冊了NSString變化,但是在繪製UILabel屬性時,忘記了它的變化? (爲我的無知道歉:)) – Bebhead

1

只需在prepareForSegue:方法中獲取對目標視圖控制器的引用,並將需要的任何對象傳遞到那裏。下面是一個例子...

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Make sure your segue name in storyboard is the same as this line 
    if ([[segue identifier] isEqualToString:@"YOUR_SEGUE_NAME_HERE"]) 
    { 
     // Get reference to the destination view controller 
     YourViewController *vc = [segue destinationViewController]; 

     // Pass any objects to the view controller here, like... 
     [vc setMyObjectHere:object]; 
    } 
} 

也performSegueWithIdentifier:發件人:方法來激活過渡到基於選擇或按下按鈕一個新的觀點。

// When any of my buttons are pressed, push the next view 
-(IBAction)buttonPressed:(id)sender 
{ 
    [self performSegueWithIdentifier:@"MySegue" sender:sender]; 
} 

// This will get called too before the view appears 
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"MySegue"]) { 

     // Get destination view 
     SecondView *vc = [segue destinationViewController]; 

     // Get button tag number (or do whatever you need to do here, based on your object 
     NSInteger tagIndex = [(UIButton *)sender tag]; 

     // Pass the information to your destination view 
     [vc setSelectedButton:tagIndex]; 
    } 
} 
0

在TableViewController,你需要創建財產,

TableViewController.h

@property (nonatomic, strong) NSString *subject; 

你通過這樣的價值,

在視圖控制器,

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([[segue identifier]isEqualToString:@"Detail"]) 
    { 
     TableViewController *testcontroller = segue.destinationViewController; 
     testcontroller.testpass.text = @"Testing123"; 
     detailView.subject = testcontroller.testpass.text; 

    } 
}