1

次のコードを使用して、別の ViewController FViewControllerからSViewControllerUILabelのテキストを設定しています

SViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"SViewController"];
[vc setTextForLabel:[NSNumber numberWithInt:1];];
[self.navigationController pushViewController:vc animated:YES];

setTextForLabel メソッド:

-(void) setTextForLabel: (NSNumber *)text {
      textLabel = [[UILabel alloc] init];
      [textLabel setText:[NSString stringWithFormat:@"%@",[text stringValue]]];
      NSLog(@"The text is %@", textLabel.text);
}

.h ファイルで textLabel のプロパティを次 のように宣言し@property (nonatomic, retain) IBOutlet UILabel *textLabel; ました。 また、ストーリーボードで IBOutlet を設定しました。

コンソールに「The text is 1」と表示されますが、UI には何も表示されません! 私は何を間違っていますか?

4

4 に答える 4

0

あなたの問題は、SViewController のビュー ライフサイクルに関連しています。呼び出す[.. setTextForLabel]と、コントローラーがビューをロードしたかどうかわかりません (したがって、UILabel がまだ作成されていない可能性が高くなります)。

コントローラーで NSString プロパティを使用し、目的のテキストを設定して、SViewController の viewDidLoad で UILabel に割り当てる必要があります。

SViewController.h 内

@propery (strong, nonatomic) NSString *textToDisplay;

SViewController.m で

-(void)viewDidLoad
{
    [super viewDidLoad];
    // Here you know all Outlet are loaded and connected
    textLabel.text = textToDisplay
}
于 2013-08-23T13:23:31.397 に答える
0

この行を削除

textLabel = [[UILabel alloc] init];

また、インターフェイスの UILabel を @property (nonatomic、retain) IBOutlet UILabel *textLabel; にリンクする必要があります。

または、このラベルを手動で追加して、textLabel = [[UILabel alloc] init]; を表示することもできます。[textLabel setText:[NSString stringWithFormat:@"%@",[text stringValue]]];

 [self.view addSubView:textLabel];
于 2013-08-23T12:43:06.680 に答える
0

私はこれが好きでした

#import "FViewController.h"
#import "SViewController.h"
@interface FViewController ()

@end

@implementation FViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}


- (IBAction)do:(id)sender
{
    SViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"SViewController"];
    [self.navigationController pushViewController:vc animated:YES];
     [vc setTextForLabel:[NSNumber numberWithInt:1]];
}

// in SViewController.h

#import <UIKit/UIKit.h>

@interface SViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *label;
-(void) setTextForLabel: (NSNumber *)text;
@end


 // SViewController.m file
#import "SViewController.h"

@interface SViewController ()

@end


@implementation SViewController
@synthesize label;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

-(void) setTextForLabel: (NSNumber *)text{
 //   label.text = [text stringValue];
    NSLog(@"%@",label);
    [label setText:[text stringValue]];
}

@end

絵コンテ

また、ストーリーボードのラベル プロパティが適切に設定されていることを確認してください

于 2013-08-23T13:01:35.923 に答える