Храните переменные, которые вы используете для создания ваших 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 (и вы бы сохранили весь код, необходимый для создания и настройки ваших UITextFields по коду).
Примечание: не используйте NSLog(stringVariable);
, а вместо NSLog(@"%@",stringVariable);
, потому что, если ваш stringVariable
содержит буквенный '%', за которым следует любой символ спецификатора (например, в вашем случае, если текст введенный в ваше nameField и набранный пользователем, содержит «user% xyz»), ваш код не работает. Поэтому всегда используйте статически введенную литеральную строку в качестве первого параметра NSLog, а не переменную.