1

プログラムでラベルのテキストを変更するのに問題があります。

次のコードを実行すると、NSLogに「SettingmyLabel to = Hello World!」と表示されますが、画面のラベルは変更されません。

    UIViewOverlay *overlayWindow;
    overlayWindow = [[[NSBundle mainBundle] loadNibNamed:@"UIViewOverlay" owner:self options:nil] objectAtIndex:0];
    [self addSubview:overlayWindow];

    [overlayWindow setMyLabel:@"Hello World!"];

私のNIBファイルには、いくつかのラベルとボタンが付いた300x300のウィンドウがあります。アウトレットのmyLabelに接続されているラベルがあります。UIViewは表示されますが、プログラムでテキストを変更することはできません。

UIViewOverlay.h

#import <UIKit/UIKit.h>

@interface UIViewOverlay : UIView {
    IBOutlet UILabel *myLabel;
}
- (void)setMyLabel:(NSString *) label;

@end

UIViewOverlay.m

#import "UIViewOverlay.h"

@implementation UIViewOverlay

- (void)setMyLabel:(NSString *) label {
    myLabel.text = label;                // THIS LINE IS NOT WORKING! :-(
    NSLog(@"Setting myLabel to = %@", label);    // This line is working.
 }

@end

前もって感謝します..

4

2 に答える 2

1

次の例のように、ラベルのコードにオブジェクトが含まれていることを確認してください。

    IBOutlet UILabel* aLabel;  

そして、Interface Builderで(すでにこれを行っているかもしれません):aLabel(または使用する名前)アウトレットを実際のラベルに接続します。これは、ドキュメントウィンドウのファイルの所有者オブジェクトからビューのラベルへのクリックアンドドラッグを制御することで実行できます。小さな灰色のウィンドウが少なくとも2つのオプションとともに表示されます。1つは前に定義したaLabelで、もう1つはビューです(これはビューコントローラに必要なデフォルトのアウトレットであり、すでに接続されていることを示すダッシュがありますなにか)。aLabelオプションをクリックして選択します。(正直に言うと、私の前にMacがなくても、この段落の説明のほとんどをこのリンクからコピーしました。)

他の変数と同じように扱うことができるaLabelというオブジェクトがあります。テキスト値を変更する場合は、次のことを試してください。

aLable.text = @"some text";

たぶんあなたは接続をしませんでした。次のことを試してみてください。

#import "UIViewOverlay.h"

@implementation UIViewOverlay

- (void)showMyLabel:(NSString *) label {
    NSLog(@"My current label contents (myLabel) = %@", myLabel.text);    // ** changed to myLabel.text
 }

@end

元の値を印刷できない場合は、接続されていません。

それがお役に立てば幸いです。

于 2011-10-06T18:51:55.553 に答える
1

ラベル文字列を設定するために、メソッドに誤ったアクセサ名を使用しています。

cocoaでは、setFooと呼ばれるインスタンス変数fooを割り当てる方法です。これは単なる慣例ではなく、プロパティの使用、キー値のコーディングなど、機能の多くの領域がそれに依存しています。

コードでは、ラベルは。と呼ばれmyLabelます。そのラベルのテキストを設定するメソッドはと呼ばれsetMyLabelます。ランタイムが最初にそのメソッドを使用してインスタンス変数にラベルを割り当てようとしている可能性があるため、これにより、nibがロードされたときにコンセントが接続されないか、上記のすべてが効果がなく、コンセントに接続されていません。

于 2011-10-06T18:53:10.300 に答える