每次调用视图时,我都以编程方式为IOS应用视图创建了2个UITextFeild和1个UIButton。 UIButton调用函数(方法)登录如何创建一种区分两个UITextViews的方法?我是一个JS程序员,有些来自同一个思维模式有没有办法通过id获取对象?或者让所有UITextFeild将它们拆分为:
-(void)login{
Array *UITF[UITFself.view.UITextFeilds];
UITF[0].text;
}
提前致谢
UITextField *uname = [[UITextField alloc] initWithFrame:CGRectMake(80.0, 100, 150.0, 30.0)];
[uname addTarget:self
action:@selector(textFieldDone:)
forControlEvents:UIControlEventEditingDidEndOnExit];
uname.borderStyle = UITextBorderStyleRoundedRect;
uname.keyboardType = UITextAutocapitalizationTypeNone;
uname.returnKeyType = UIReturnKeyDone;
uname.autocorrectionType = UITextAutocorrectionTypeNo;
[self.view addSubview:uname];
-(void)login {
//send login message
NSString *u=uname.text;//user name text
NSString *p=pass.text;//password text
NSLog(u);
NSLog(p);
}
答案 0 :(得分:1)
最简单的方法是在标题中声明UITextField
:
UITextField *nameTextField;
UITextField *passTextField;
然后在实现中使用这些引用。
答案 1 :(得分:1)
将用于创建UITextFields的变量存储为实例变量 - 或更好,如@property
- 在标题中,而不是局部变量。因此,您可以从班级的任何地方访问它们。
.h:
@interface YourClass : UIViewController {
}
@property(nonatomic, retain) IBOutlet UITextField* nameField;
@property(nonatomic, retain) IBOutlet UITextField* passField;
@end
的.m:
@implementation YourClass
@synthesize nameField, passField;
-(void)dealloc {
self.nameField = nil; // release memory when your class is deallocated
self.passField = nil; // release memory when your class is deallocated
[super dealloc];
}
-(void)loadView {
// here create your UITextFields programatically...
self.nameField = [[[UITextField alloc] initWitHFrame:...] autorelease];
...
self.passField = [[[UITextField alloc] initWitHFrame:...] autorelease];
...
// or much more easier, you should create them using InterfaceBuilder,
// this would save you a lot of code
}
-(IBAction)login {
NSLog(@"name: %@ ; pass: %@", nameField.text, passField.text);
}
@end
仅供参考,请注意,如果您使用InterfaceBuilder构建界面,则不会出现问题,因为您已经将IBOutlets连接到UITextFields(并且您将保存创建和配置UITextField所需的所有代码)按代码)。
旁注:请勿使用NSLog(stringVariable);
,而是使用NSLog(@"%@",stringVariable);
,因为如果您的stringVariable
包含一个后跟任何说明符字符的后缀'%'(例如,您的情况是,如果在您的nameField中输入并由用户键入的文本包含“user%xyz”),您的代码将崩溃。所以总是使用静态输入的litteral字符串作为NSLog的第一个参数,而不是变量。
答案 2 :(得分:0)
UIView对象具有NSInteger 标记属性,在动态创建的视图中非常有用。在创建时设置值,并从其任何父视图中使用viewWithTag:。