2014-01-29 162 views
1

我有兩個視圖控制器從一個UILabel從一個視圖控制器將數據發送到另一

DetailViewController

BlogViewController

我有一個「推」建立上的腳本中與標識符'ShowBlog'

我需要從以下的UILabel發送博客的標題DetailViewController

@property (strong, nonatomic) IBOutlet UILabel *TitleLabel; 

BlogViewController一個UILabel稱爲BlogTitleLabel:

@property (strong, nonatomic) IBOutlet UILabel *BlogTitleLabel; 

我知道我需要使用:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([[segue identifier] isEqualToString:@"ShowBlog"]) { 

     // Im struggling with the code 

    } 
} 

但是我的代碼掙扎進去吧

回答

2

使用NSUserDefaults代碼是這樣的:

存儲標題:

[[NSUserDefaults standardUserDefaults] setObject:label.title forKey:@"nameForStoredVariableHere"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

檢索存儲的標題:

NSString *storedTitle = [[NSUserDefaults standardUserDefaults] objectForKey:@"nameForStoredVariableHere"]; 

之後,你就可以自由使用標題請按照您的要求

+2

是的,你可以使用用戶默認來傳遞信息,但這是一個鈍器。用戶默認寫入磁盤。與基於內存的信息傳遞相比,速度較慢,並縮短了閃存驅動器的使用壽命。如果您希望該值在應用程序運行之間持續存在,那麼這是一個非常好的選擇,但它不適合不持久的數據。 –

+1

我使用這種方法制作了大量的應用程序。這些日子用超級快速的蘋果設備這種方式沒有什麼特別慢的。 –

+0

實際上,如果你寫的是大量的數據,但是對於一段簡單的文本,這個限制是唯一可行的。應該有沒有性能差異。 – virindh

2

prepareForSegue之前調用目標VC的viewDidLoad,所以不要嘗試訪問prepareForSegue中的目標視圖控制器的任何視圖對象。你最好在目的地創建一個字符串屬性,並在prepareForSegue方法中設置它。在目標視圖控制器的viewDidLoad中將其設置爲label

2

您不應該嘗試從標籤發送數據到標籤。標籤是視圖對象。他們顯示信息並收集用戶的輸入。他們不存儲信息。

此外,你永遠不應該試圖直接操縱另一個視圖控制器的視圖。這違反了其他視圖控制器的封裝。

這兩個視圖控制器都應該有NSString屬性。我們在兩個VC上稱它爲blogTitle。

你DetailViewController應設置它的BLOGTITLE地方在它的安裝程序,然後在viewWillAppear中:動畫,顯示值是titleLabel插座:

- (void) viewWillAppear: animated; 
{ 
    [super viewWillAppear: animated]; 
    self.titleLabel.text = self.blogTitle; 
    //your other code here 
} 

然後,在你prepareForSegue:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"ShowBlog"]) 
    { 
    BlogViewController *theBlogController = [segue destinationViewController]; 
    theBlogController.blogTitle = self.blogTitle; //Pass the blog title to the other VC 
    } 
} 

然後在BlogViewController的viewWillAppear中,將blogTitle複製到它的標題標籤上:

- (void) viewWillAppear: animated; 
{ 
    [super viewWillAppear: animated]; 
    self.titleLabel.text = self.blogTitle; 
    //your other code here 
} 

請注意,Cocoa/iOS編程有很強的命名約定,您應該遵循。只有文件名和類名應以大寫字母開頭。方法名稱,實例變量名稱和屬性名稱應以小寫字母開頭。所以你的TitleLabel應該是titleLabel,而BlogTitleLabel應該是blogTitleLabel。

+0

誰投我倒,爲什麼? –

相關問題