UILabelのテキストを変更し、それらが初期化されています.mファイルで、その後私はのUIViewControllerでUILabelとそのラベルを変更する機能を作成した.hファイルに次のように他のクラスから
@interface StoreDetailsController : UIViewController {
UILabel *storeNameLabel;
}
@property (nonatomic, retain) IBOutlet UILabel *storeNameLabel;
- (IBAction)LabelTheStore:(int)storeNumber;
:
@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ロードする
方法:あなたはUILabelを毎回割り当てているあなたのLabelTheStore方法で
- (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)storeDetailsのビューを1つ、そのビューのコントローラを1つ、2)行を選択するとそのビューの内容を変更します。あなたのtableViewControllerでは、storeDetailsControllerにアクセスする必要があります。そのアクセスは通常Xcode Interface Builderで設定されますが、それを実行する方法はたくさんあります。より現代的な方法は、テーブルビューのセルからstoreDetailsControllerまでのセグを使用することです。 – GoZoner
「IBOutlet storeDetailsController storeDetailsController」をtableViewControllerのヘッダーファイルに入れて、それをXcode IBにリンクする方法は現代的ではありません。それからあなたはそれを割り当てません。あなたのdidSelectRowAtIndexPathは次のようになります:{[self.storeDetailsController LabelTheStore:indexPath.row];/* push、deselect * /} – GoZoner
@GoZoner私はストーリーボードの機能を利用するためにアプリケーションを完全に書き直しました。私は今同じステージにいますが、セグを使用してstoreDetailsビューを表示するのに問題があります。チュートリアルやアドバイスがありますか? – robbiecutting