从另一个类中设置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
放入值,然后在第二个中使用它。
这个教程帮助我解决了这个问题。