我在一個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];
}
每次選擇表格行時分配和初始化storeDetailsController是非常不尋常的;這可能是問題所在。正常的做法是1)你有一個視圖,用於存儲細節和一個控制器的視圖,2)當你選擇一行時,你改變了該視圖的內容。在你的tableViewController中,你需要訪問storeDetailsController。該訪問通常在Xcode Interface Builder中設置 - 但有很多方法可以實現。更現代的方式是從表格視圖中的單元格到storeDetailsController。 – GoZoner
一個不太現代的方式,它爲您的tableViewController在頭文件中放置'IBOutlet storeDetailsController storeDetailsController',然後將它鏈接到Xcode IB中。然後你不分配它。您的didSelectRowAtIndexPath變爲:{[self.storeDetailsController LabelTheStore:indexPath.row];/*推,取消選擇* /} – GoZoner
@GoZoner我已經完全重寫我的應用程序以利用故事板功能。我現在處於同一階段,但我無法使用segue來顯示storeDetails視圖。你有可以給我的教程或建議嗎? – robbiecutting