0

コードでやりたいことは、ボタンが押されたときに Label.m ファイルの関数を実行し、ラベル テキストを "test" に設定することです。コードを実行するたびに関数が呼び出されますが、ラベルのテキストは変更されません。誰かが私のコードを修正するのを手伝ってくれますか、またはクラスファイルからラベルテキストを変更するための正しくて最も簡単な方法を教えてください。

私のFirstViewController.hで

@interface FirstViewController : UIViewController{
    IBOutlet UILabel *test;
}
@property (nonatomic, retain) IBOutlet UILabel *test;

私のFirstViewController.mで

#import "Label.h"
-(IBAction)refresh:(id)sender {
    [Label getSchedule];
}

私のLabel.hで

#import "FirstViewController.h"
@interface Label : NSObject
+ (void)getSchedule;


@end

私のLabel.mで

#import "FirstViewController.h"

@implementation Label

+ (void)getSchedule{
    NSLog(@"log");
    FirstViewController *VC = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];

    VC.test.text = @"test";

}


@end
4

1 に答える 1

0

編集: Maddy がコメントで述べたように、元のポスター コードは、viewController がすべてのビュー オブジェクトを取得した後に呼び出された場合に機能します。元の投稿者が望んでいたことを実現する簡単な方法は、単純に追加することです。

self.test.text = @"test";

viewControllers の viewDidLoad メソッドに。

とにかく、元のポスターコードを改善し、依存関係の一部を削除すると信じているため、元の回答をここに残します。達成したいことにはまだ複雑すぎますが、そのようなパターンは、より適切なシナリオに転送できます。


私のコメントを詳しく説明するには:

あなたの方法

+ (void)getSchedule{
    NSLog(@"log");
    FirstViewController *VC = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];

    VC.test.text = @"test";
}

クラスメソッドです。したがって、当然発生しますが、UILabel インスタンスはこのインスタンスをテストしますが、これについてはわかりません。さらに、NSObject をサブクラス化する独自のクラス Label を作成したようですが、実際のラベル インスタンスは通常の UILabel です。

あなたがやろうとしていることは次のようなものだと思います:

@interface Label : UILabel
- (void)getSchedule;
@end  

...

@interface FirstViewController : UIViewController
@property (nonatomic, retain) IBOutlet Label *test;

編集:メソッドを忘れました(!)

- (void)getSchedule{
    self.text = @"test";
}

そして最後にあなたのviewControllerで...

#import "Label.h"
-(IBAction)refresh:(id)sender {
    [self.test getSchedule];
}
于 2013-11-10T18:58:05.617 に答える