2012-05-03 3 views
0

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]; 
} 
+0

テーブル行が選択されるたびにstoreDetailsControllerを割り当てて初期化することは非常に珍しいことです。これはおそらく問題です。通常の方法は、1)storeDetailsのビューを1つ、そのビューのコントローラを1つ、2)行を選択するとそのビューの内容を変更します。あなたのtableViewControllerでは、storeDetailsControllerにアクセスする必要があります。そのアクセスは通常Xcode Interface Builderで設定されますが、それを実行する方法はたくさんあります。より現代的な方法は、テーブルビューのセルからstoreDetailsControllerまでのセグを使用することです。 – GoZoner

+0

「IBOutlet storeDetailsController storeDetailsController」をtableViewControllerのヘッダーファイルに入れて、それをXcode IBにリンクする方法は現代的ではありません。それからあなたはそれを割り当てません。あなたのdidSelectRowAtIndexPathは次のようになります:{[self.storeDetailsController LabelTheStore:indexPath.row];/* push、deselect * /} – GoZoner

+0

@GoZoner私はストーリーボードの機能を利用するためにアプリケーションを完全に書き直しました。私は今同じステージにいますが、セグを使用してstoreDetailsビューを表示するのに問題があります。チュートリアルやアドバイスがありますか? – robbiecutting

答えて

0

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

LabelTheStoreの内容は、単に次のようになります。

self.storeNameLabel.text = @"TEST"; 

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

+0

お返事ありがとうございます。あなたが述べたとおり、私はコードを修正しましたが、まだラベルを更新していません。私はそれを更新した後にlabel.textを表示するためにNSLogを追加しようとしましたが、(null)としてまだ出ています。 。 – robbiecutting

+0

私はStoreDetailsControllerをどのように初期化したかに問題があると思っています。私はTab Bar Applicationを持っています。タブの1つは、ストア名のリストを持つUITableViewControllerのサブクラスをロードします。行が選択されると、StoreDetailsControllerのインスタンスが作成され、.xibファイルで初期化された後、pushViewControllerを使用してそのビューがビューにプッシュされます。呼び出すLabelTheStore関数は、UiTableViewControllerクラス内のdidSelectRowAtIndexPath関数でも呼び出されます。もう一度お世話になりました – robbiecutting

+0

StoreDetailsControllerビューにボタンを追加し、LabelTheStore関数にリンクしました。ビューがロードされたら、ラベルを押してもラベルが正しく更新されます。その後、TableViewに戻って行を再度選択すると、ラベルは更新されずに表示されますが、ボタンをもう一度押すと更新されます。だから私はどのように私はビューを設定している必要があります。何か案は? – robbiecutting

関連する問題