gpt4 book ai didi

ios - textFieldShouldReturn 忽略变量

转载 作者:行者123 更新时间:2023-11-29 10:40:18 26 4
gpt4 key购买 nike

我的 textFieldShouldReturn 上有这段代码(与调用的方法不在同一个类中):

  - (BOOL)textFieldShouldReturn:(UITextField *)textField {
LoginViewController *loginViewController = [[LoginViewController alloc]init];

if (textField.returnKeyType == UIReturnKeyJoin) [loginViewController logIn];
return (textField.returnKeyType == UIReturnKeyDone);
}

到目前为止一切正常,这是“登录”方法的代码:

  - (IBAction)logIn{

NSString *username = [[self.usernameLoginField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] lowercaseString];
NSString *password = [[self.passwordLoginField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] lowercaseString];

NSLog(@"Username: %@ - Password: %@ ",username,password);
//Whatever
}

在我的 view 上,我有一个调用该方法的按钮,当我使用该按钮时,NSLog 显示 UITextField 包含的内容那一刻,否则,如果从键盘上的“Join”(Return 键)调用该方法,则 NSLog 显示空内容变量。
我错过了什么?

最佳答案

在我看来,您有 3 种可能的解决方案:

选项 1:恕我直言,最佳选项。

您可以将 UIAlertView 与 UIAlertViewStyle = UIAlertViewStyleLoginAndPasswordInput 一起使用

self.alertView = [[UIAlertView alloc] initWithTitle:nil
message:@"LogIn"
delegate:self
cancelButtonTitle:nil
otherButtonTitles:@"Cancel", @"Join", nil];

self.alertView.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;

[self.alertView show];

然后与代表:

- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (alertView == self.alertView)
{
if (buttonIndex == 1)
{
[self logIn:[[alertView textFieldAtIndex:0] text] andPassword:[[alertView textFieldAtIndex:1] text]];
}
else if (buttonIndex == 0)
{
[self.navigationController popViewControllerAnimated:YES];

}
}
}

记得加上:UIAlertViewDelegate

选项 2:

使用 [self performSegueWithIdentifier:@"identifier"sender:self]- (void)prepareForSegue:(UIStoryboardSegue *)segue 发件人:(id)发件人

#pragma mark - UITextFieldDelegate

- (BOOL) textFieldShouldReturn:(UITextField *)textField
{
if (textField == self.usernameLoginField)
{
[self.usernameLoginField resignFirstResponder];
[self.passwordLoginField becomeFirstResponder];
}
else if (textField == self.passwordLoginField)
{
[self.passwordLoginField resignFirstResponder];

//This Identifier is in the Storyboard
[self performSegueWithIdentifier:@"option2Segue" sender:self];

}

return true;
}


#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[(YourViewController *)segue.destinationViewController setUsername:self.usernameLoginField.text];
[(YourViewController *)segue.destinationViewController setPassword:self.passwordLoginField.text];
}

在 YourViewController.h 中你需要:

@property (nonatomic, strong) NSString* username;
@property (nonatomic, strong) NSString* password;

记得加上:UITextFieldDelegate

选项 3

要发回信息,您应该使用委托(delegate):

在你的firstViewController.h中:

#import "DelegateViewController.h"

@interface FirstViewController : UIViewController

  • (void) 登录:(NSString *) 用户名​​密码:(NSString *) 密码;

在你的firstViewController.m中:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"option3Delegate"])
{
((DelegateViewController *) segue.destinationViewController).delegate = self;
}
}

在你的delegateViewController.h中:

@protocol Option3Delegate <NSObject>

- (void) logIn: (NSString *) username password: (NSString *) password;

@end

@interface DelegateViewController : UIViewController
{
id myDelegate;
}

@property (nonatomic, assign) id<Option3Delegate> delegate;

@end

在你的delegateViewController.m中:

#pragma mark - UITextFieldDelegate

- (BOOL) textFieldShouldReturn:(UITextField *)textField
{
if (textField == self.usernameLoginField)
{
[self.usernameLoginField resignFirstResponder];
[self.passwordLoginField becomeFirstResponder];
}
else if (textField == self.passwordLoginField)
{
[self.passwordLoginField resignFirstResponder];

//This Identifier is in the Storyboard

if ([_delegate respondsToSelector:@selector(logIn:password:)])
{
[_delegate logIn:self.usernameLoginField.text password:self.passwordLoginField.text];
}

[self.navigationController popViewControllerAnimated:YES];
}

return true;
}

记得加上:UITextFieldDelegate

选项 4:使用 KeyboardController

KeyboardController 是一个小型解决方案,用于处理 UITextFields 中的键盘交互。但是只能处理 Next 和 Done Return 键。要处理 Join 键,您可以在 ViewController 中进行。在分配 KeyboardController 的 View Controller 中:

@property (strong, nonatomic) IBOutlet UITextField *usernameLoginField;
@property (strong, nonatomic) IBOutlet UITextField *passwordLoginField;
@property (strong, nonatomic) KeyboardController *keyboardController;


- (void)viewDidLoad
{
[super viewDidLoad];

id fields = @[self.usernameLoginField, self.passwordLoginField];
self.keyboardController = [KeyboardController controllerWithFields:fields];

//Important
self.passwordLoginField.delegate = self;
}

#pragma mark - UITextFieldDelegate

- (BOOL) textFieldShouldReturn:(UITextField *)textField
{
if (textField == self.passwordLoginField)
{
[self.passwordLoginField resignFirstResponder];
[self logIn];
}

return true;
}

- (IBAction)logIn
{
NSLog(@"Username: %@ - Password: %@", self.usernameLoginField.text, self.passwordLoginField.text);
//Whatever
}

您可以 download an example with the 4 options here :

关于ios - textFieldShouldReturn 忽略变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24857196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com