Ios 在另一个UIViewController上执行方法
我正在使用以下代码从另一个ViewControllerFViewController中设置UILabel的文本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
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]]];
}
看一看,你可以使用nsnoticeAtonCentertextLabel
isIBOutlet
,不要再分配它。如果你需要在另一个视图控制器中调用方法,而不是通过委托调用方法,我想会有问题。如果我删除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中设置将具有相同的效果