1

我正在使用以下代码在SViewController中设置UILabel的文本,来自另一个 ViewController FViewController

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。

现在在控制台中我看到“文本为 1”,但 UI 没有显示任何内容!我究竟做错了什么?

4

4 回答 4

0

首先去放

[vc setTextForLabel:[NSNumber numberWithInt:1]]; 

推完vc之后。

在您的 xib/storyboard 中,如果您的标签中写有某些内容,请将其删除,并将其留空。如果这不起作用...在 push 之前保留 setText 方法(正如您最初编写的那样)并创建一个 NSNumber 成员,该成员将保存您的值并将其应用到 viewDidAppear 中,如下所示

-(void) setTextForLabel: (NSNumber *)text{
numberValue = text;  // declared in .h as NSNumber *numberValue (only make it a property if you need acces to it from outside your class)
}

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated]; //this is important
[textLabel setText:[NSString stringWithFormat:@"%@",[numberValue stringValue]]];
}
于 2013-08-23T13:27:47.750 回答
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 回答