如何处理具有相同类的多个对象?

时间:2011-09-06 16:28:57

标签: objective-c

每次调用视图时,我都以编程方式为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);

}

3 个答案:

答案 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:。