2012-05-03 55 views
0

我在一個UIViewController和函數創建一個UILabel更改一個UILabel文本更改標籤,它們被初始化爲.h文件如下:從另一個類

@interface StoreDetailsController : UIViewController { 
UILabel *storeNameLabel; 
} 

@property (nonatomic, retain) IBOutlet UILabel *storeNameLabel; 

- (IBAction)LabelTheStore:(int)storeNumber; 

然後在.m文件:

@synthesize storeNameLabel; 

... 

-(void)LabelTheStore:(int)storeNumber 
{ 
    NSLog(@"CHECK NUMBER: %d", storeNumber); 
    storeNameLabel = [[UILabel alloc] init]; 
    storeNameLabel.text = @"TEST"; 
} 

一個int變量被傳遞給將被使用的函數。日誌根據我傳遞的內容顯示正確的數字,所以我知道函數被正確調用,但是當我從另一個類調用函數時,標籤永遠不會更新。如果我在storeNameLabel.text上調用NSLog,則顯示爲(null)。

storeNameLabel在界面生成器中正確鏈接,程序生成OK。 更新:

的方法來加載StoreDetailsController:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    StoreDetailsController *storeDetailsController = [StoreDetailsController alloc]; 
    storeDetailsController = [storeDetailsController initWithNibName:@"StoreDetailsController" bundle:[NSBundle mainBundle]]; 

    NSInteger row = indexPath.row; 
    [storeDetailsController LabelTheStore:row]; 

    [self.navigationController pushViewController:storeDetailsController animated:YES]; 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 
+0

每次選擇表格行時分配和初始化storeDetailsController是非常不尋常的;這可能是問題所在。正常的做法是1)你有一個視圖,用於存儲細節和一個控制器的視圖,2)當你選擇一行時,你改變了該視圖的內容。在你的tableViewController中,你需要訪問storeDetailsController。該訪問通常在Xcode Interface Builder中設置 - 但有很多方法可以實現。更現代的方式是從表格視圖中的單元格到storeDetailsController。 – GoZoner

+0

一個不太現代的方式,它爲您的tableViewController在頭文件中放置'IBOutlet storeDetailsController storeDetailsController',然後將它鏈接到Xcode IB中。然後你不分配它。您的didSelectRowAtIndexPath變爲:{[self.storeDetailsController LabelTheStore:indexPath.row];/*推,取消選擇* /} – GoZoner

+0

@GoZoner我已經完全重寫我的應用程序以利用故事板功能。我現在處於同一階段,但我無法使用segue來顯示storeDetails視圖。你有可以給我的教程或建議嗎? – robbiecutting

回答

0

在你LabelTheStore方法,則需要分配,每次一個UILabel;那是沒有投票的工作。在你的UI中,你有一個由StoreDetailsController控制的視圖。視圖中應該有一個UILabel,它連接到控制器中的storeNameLabel的IBOutlet。你把它聯繫起來;它已經被分配,所以你不需要再分配它。

LabelTheStore的內容應該僅僅是:

self.storeNameLabel.text = @"TEST"; 

如果該方法被調用,但是仍沒有看到那麼標籤的變化確保從StoreDetailsController的IBOutlet中連接到的UILabel。

+0

謝謝你的回答。我已經修改了代碼,但仍未更新標籤。我嘗試添加一個NSLog以在更新後顯示label.text,但它仍然是(null)。 。 – robbiecutting

+0

我在想如何初始化StoreDetailsController有一個問題。我有一個選項卡欄應用程序,其中一個選項卡用商店名稱列表加載UITableViewController的子類。在選擇行時,它會創建一個StoreDetailsController實例,使用.xib文件對其進行初始化,然後使用pushViewController將該視圖推送到視圖中。我試圖調用的LabelTheStore函數也在UiTableViewController類的didSelectRowAtIndexPath函數中調用。再次感謝您的幫助 – robbiecutting

+0

我剛剛在StoreDetailsController視圖中添加了一個按鈕,並將其鏈接到LabelTheStore函數,並且如果在視圖加載後按下該按鈕,標籤就會正確更新。如果我然後返回到TableView並再次選擇一行,它將顯示標籤而不更新它,但是再次按下按鈕會更新它?所以它必須與我如何設置視圖有關。有任何想法嗎? – robbiecutting