2013-01-21 40 views
3

我有兩個視圖控制器。在第一個視圖控制器中,我有名稱列表。當我點擊它時,我想要在第二個視圖控制器中顯示相同的名稱。的UILabel文本不改變,但是xx.title工作

我有下面的代碼。

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    // PropDetailViewController is second view controller 
    PropDetailViewController *prop = [self.storyboard instantiateViewControllerWithIdentifier:@"prop"]; 

    ListOfProperty *propList = [propListFinal objectAtIndex:indexPath.row]; 

    NSString *myText = [NSString stringWithFormat:@"%@", propList.addressOfFlat]; 
    prop.detailLabel.text = myText; 
    prop.title = myText; 

    [self.navigationController pushViewController:prop animated:YES]; 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

PropDetailViewController,我有@property (retain, nonatomic) IBOutlet UILabel *detailLabel;

我期待的是當我點擊說Name 1時,我會在UILabel和UINavigationBar中看到Name 1作爲文本。但是,我只在導航欄上看到Name 1,而不是在UILabel上。

+0

也有類似的問題前幾天,但我沒有找到它。但是,如果我找不到它,我會嘗試一個答案。 –

+0

如果它不起作用,爲什麼不嘗試在PropDetailViewController中使用detailLabel.text = title! –

+0

@Dpk:這很好,但實際上我不想顯示標題。在標題我將靜態文本爲「names」 –

回答

4

,不建議在程序流點訪問一個UIView的項目。設置prop.detailLabel.text的值時,視圖可能尚未加載。稍後加載視圖時,UIView將使用IB中XIB文件中給出的默認設置進行更新。

你還是設置一個NSString屬性,可以說

@property (retain, nonatomic) NSString *propName; 

你做推視圖控制器之前爲它分配。但是使用這個屬性而不是UILable。而在PropDetailViewController在viewDidLoad中做到以下幾點:

(void) viewDidLoad { 
    // call super viewDidLoad and all the works ... 

    self.detailLabel.text = propName; 

} 

相反viewDidLoad中,你可以使用viewWillAppear中。因爲viewDidLoad可以在您分配屬性值時執行。

如果你想在保存側,然後在那裏你交出所有要設置的前期值發明一種新的init方法。 但我從來沒有在與故事板組合(在這裏你可以使用實例化......而不是初始化...),所以我不能給任何意見了我的頭頂部。

另一個乾淨的方法是堅持使用propName屬性,但要實現自定義設置器-(void)setPropName:(NSString)propName;,您可以在其中設置屬性(如果自動合成,可能是_propName)並設置UILable文本並在viewDidLoad中設置UILable文本。在代碼

@property (retain, nonatomic) NSString *detailText; 

PropDetailViewController.m

.H變化符合

NSString *myText = [NSString stringWithFormat:@"%@", propList.addressOfFlat]; 
    prop.detailText = myText; 
    prop.title = myText; 
在viewDidLoad中

+0

謝謝,這是工作。 –

1

試試這個

[self.detailLabel setText:self.detailText];