Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在另一个UIViewController上执行方法_Ios_Objective C_Storyboard - Fatal编程技术网

Ios 在另一个UIViewController上执行方法

Ios 在另一个UIViewController上执行方法,ios,objective-c,storyboard,Ios,Objective C,Storyboard,我正在使用以下代码从另一个ViewControllerFViewController中设置UILabel的文本 SViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"SViewController"]; [vc setTextForLabel:[NSNumber numberWithInt:1];]; [self.navigationController pushViewControlle

我正在使用以下代码从另一个ViewControllerFViewController中设置UILabel的文本

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的属性如下:
@属性(非原子,保留)IBUILabel*textLabel
我还在故事板中设置了IBOutlet

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

删除此行

textLabel = [[UILabel alloc] init];
此外,您还需要将接口上的UILabel链接到@property(非原子,保留)IBOutlet UILabel*textLabel

也可以手动添加此标签以查看
textLabel=[[UILabel alloc]init]; [textLabel setText:[NSString stringWithFormat:@“%@,[text stringValue]]

 [self.view addSubView:textLabel];
我确实喜欢这个

#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
#导入“FViewController.h”
#导入“SViewController.h”
@接口FViewController()
@结束
@FViewController的实现
-(无效)viewDidLoad
{
[超级视图下载];
//加载视图后,通常从nib执行任何其他设置。
}
-(iAction)do:(id)发件人
{
SViewController*vc=[self.storyboard实例化eviewcontrollerwhiteIdentifier:@“SViewController”];
[self.navigationController pushViewController:vc动画:是];
[vc setTextForLabel:[NSNumber Number Withint:1]];
}
//在SViewController.h中
#进口
@界面SViewController:UIViewController
@属性(弱,非原子)IBUILabel*标签;
-(无效)setTextForLabel:(NSNumber*)文本;
@结束
//SViewController.m文件
#导入“SViewController.h”
@接口SViewController()
@结束
@SViewController的实现
@合成标签;
-(id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil
{
self=[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
如果(自我){
//自定义初始化
}
回归自我;
}
-(无效)viewDidLoad
{
[超级视图下载];
//加载视图后执行任何其他设置。
}
-(无效)setTextForLabel:(NSNumber*)文本{
//label.text=[text stringValue];
NSLog(@“%@”,标签);
[label setText:[text-stringValue]];
}
@结束


另外,请检查序列图像板中的标签属性是否正确设置

您的问题与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
}
首先,把它放进去

[vc setTextForLabel:[NSNumber numberWithInt:1]]; 
在你推vc之后

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

-(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]]];
}

看一看,你可以使用nsnoticeAtonCenter
textLabel
is
IBOutlet
,不要再分配它。如果你需要在另一个视图控制器中调用方法,而不是通过委托调用方法,我想会有问题。如果我删除alloc和init,它会显示(null)而不是1,原因(显然是?)InstanceEvewController WithiIdentifier不调用[[SViewController alloc]init]+如果我试图以编程方式将标签放在屏幕上,它将不会显示。(null)是因为变量UILabel未链接到屏幕上的真实标签。尝试使用frame创建标签,并将其添加到视图UILabel*lblH2=[[UILabel alloc]initWithFrame:CGRectMake(100,100,40,60)];lblH2.text=@“测试”;[self.view addSubView:lblH2];lblH2显示,我将再次尝试检查整个代码是否存在愚蠢的错误:/UILabel*showText=[[UILabel alloc]initWithFrame:CGRectMake(176131124,58)];showText.text=[NSString stringWithFormat:@“%@,[text stringValue]];[self.view addSubview:showText];NSLog(@“文本为%@”,showText.text);工作和表演都很好。请标记为答案ExtLabel=[[UILabel alloc]init]//评论这行这对你有用吗?即使在pushViewController之后,这也不起作用。。。我想我有一些问题出现了。。。不是viewDidLoad。。。因为在加载.xib之后调用ViewDidAspect,而在加载之前调用didLoad。。。因此,它将保持.xib(请参见我的响应贝娄)viewdiddload的UILabel值,在从NIB加载主视图之后调用。在上面的代码片段中,在didLoad或didispect中设置将具有相同的效果