0

UIViewControllerで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はInterfaceBuilderで正しくリンクされており、プログラムは正常にビルドされます。アップデート:

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];
}
4

1 に答える 1

0

LabelTheStore メソッドでは、毎回 UILabel を割り当てています。それは働くことに投票していません。UI には、StoreDetailsController によって制御されているビューがあります。ビューには、コントローラーの storeNameLabel の IBOutlet にリンクされた UILabel が含まれている必要があります。あなたはそれをリンクしました。すでに割り当てられているため、再度割り当てる必要はありません。

LabelTheStore のコンテンツは次のようになります。

self.storeNameLabel.text = @"TEST";

そのメソッドが呼び出されてもラベルの変更が表示されない場合は、StoreDetailsController からの IBOutlet が UILabel に接続されていることを確認してください。

于 2012-05-04T13:59:56.313 に答える