从另一个类中设置UITextField.text

我有两个视图,我试图显示文字,我从第一个视图中的另一个UITextField 。 第二个视图由 – ( source )显示,所以方法ViewWillAppear和ViewDidLoad将不起作用。 第二个视图的viewDidLoad方法在app启动时运行。

我试图做第二类的方法

secondClass.h:

 @property (strong, nonatomic) IBOutlet UITextField *itemName;//all hooked up in storyboard -(void)SetName:(NSString *)name; 

secondClass.m:

 -(void)SetName:(NSString *)name{ NSLog(@"%@",name); itemName.text = name;//itemName - textField } 

并在第一个使用它:

 secondViewConroller *secondView = [[secondViewConroller alloc]init]; [secondView SetName:@"Bill"]; 

NSlog显示“Bill”,但textField.text不会改变任何东西。

我猜这应用程序显示UITextField没有更改,因为它显示第二个视图,它从viewDidLoad方法获得,我需要更新它以某种方式

我的问题 :改变不同类别UI元素属性的最佳方法是什么?

最简单的方法:

secondViewConroller.h:

 @property NSString * conversationName; 

secondViewConroller.m:

 @synthesize conversationName; -(void)SetName:(NSString *)name{ NSLog(@"%@",name); itemName.text = conversationName } 

在alloc:

 secondViewConroller *secondView = [[secondViewConroller alloc]init]; conversationName = @"Set this text"; [secondView SetName:@"Bill"]; 

之后我build议你阅读有关协议。

最简单的方法:在secondViewConroller.h中:

 @property (nonatomic, retain) NSString *stringName; 

secondViewConroller.m:

 @synthesize stringName; 

并在viewDidLoad方法中写下这一行

 itemName.text = stringName 

在alloc:

 secondViewConroller *secondView = [[secondViewConroller alloc]init]; secondView.stringName = @"Set this text"; 

如果你的itemNamevariables出现在nslog中,那么猜测是有问题的。 你在文本框的界面生成器中创build了一个引用sockets吗? 否则你可以通过标签获得正确的文本字段,在IB中例如将标签1放在文本字段上,并在代码中进行:

 UITextField *tf=(UITextField*)[self.view viewWithTag:1]; tf.text=name; 

(如果不是直接在主视图中,则将持有文本字段的视图replace为self.view)

所以我find了一个解决scheme:调用方法SetName有一些问题:使用从第一个UIViewController获取的参数。

基本上解决scheme是:创buildNSObject并从第一个UIViewConroller放入值,然后在第二个中使用它。

这个教程帮助我解决了这个问题。