iOS 键盘上的下一步按钮不起作用

iOS Next Button on Keyboard Not Working

我找到了使 ui 键盘上的下一个按钮转到下一个文本字段的解决方案,但它对我来说根本不起作用。在情节提要中我也必须做些什么吗?另外,如何使最终文本字段的下一个按钮调用 unwind segue?谢谢

//
//  AddToDoItemViewController.m
//  ToDoList
//
//  Copyright (c) 2015 com.example. All rights reserved.
//

#import "AddToDoItemViewController.h"

@interface AddToDoItemViewController ()
@property (weak, nonatomic) IBOutlet UITextField *textField;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *saveButton;
@property (weak, nonatomic) IBOutlet UITextField *totalTextField;
@property (weak, nonatomic) IBOutlet UITextField *tipTextField;
@property (weak, nonatomic) IBOutlet UIView *singleTableView;
@property (weak, nonatomic) IBOutlet UISwitch *ccSwitch;

@end

@implementation AddToDoItemViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.
}

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

    else{
        [textField resignFirstResponder];
    }
    return YES;
}

/*- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == self.textField) {
        [theTextField resignFirstResponder];
    } else if (theTextField == self.totalTextField) {
        [self.tipTextField becomeFirstResponder];
    }
    return YES;
}
 */


- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
    NSLog(@"sender = %@",sender);
    if (sender != self.saveButton)  return YES;
    NSNumberFormatter *formatter1 = [[NSNumberFormatter alloc] init];
    NSNumber *totalOrder = [formatter1 numberFromString:self.totalTextField.text];
    NSNumber *tipOrder = [formatter1 numberFromString:self.tipTextField.text];
    double tot = totalOrder.doubleValue;
    double totalOrderWithTip = tipOrder.doubleValue;
    if(self.textField.text.length <= 0)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:@"Field not entered"
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        return NO;


    }
    if(self.totalTextField.text.length <= 0)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:@"Field not entered"
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        return NO;


    }
    if(self.tipTextField.text.length <= 0)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:@"Field not entered"
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        return NO;


    }
    if(totalOrder == nil)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:@"Invalid Order Total"
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        return NO;


    }
    if(tipOrder == nil)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:@"Invalid Amount Recieved"
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        return NO;


    }

    if(totalOrderWithTip < tot)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:@"The amount recieved must be       equal to or greater than the order total."
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        return NO;

    }
    return YES;



}


#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 {
    if (sender != self.saveButton) return;
    if (self.textField.text.length > 0) {

        NSNumberFormatter *formatter1 = [[NSNumberFormatter alloc] init];
       // NSNumber *tipPercent = [[NSNumber alloc] initWithFloat:0.0];
        NSNumber *totalOrder = [formatter1 numberFromString:self.totalTextField.text];
        NSNumber *tipOrder = [formatter1 numberFromString:self.tipTextField.text];
        NSNumber *actualTip = [[NSNumber alloc] initWithFloat:tipOrder.doubleValue - totalOrder.doubleValue];
        double tot = totalOrder.doubleValue;
        double tip1 = tipOrder.doubleValue - tot;
        self.toDoItem = [[ToDoItem alloc] init];
        self.toDoItem.location = self.textField.text;
        NSNumber *percent1 = [[NSNumber alloc] initWithDouble:(tip1/tot)*100.0];
        if(self.ccSwitch.isOn)
            self.toDoItem.isCreditCard = YES;
        else
            self.toDoItem.isCreditCard = NO;

        self.toDoItem.total = totalOrder;
        self.toDoItem.tip = actualTip;
        self.toDoItem.percentage = percent1;
        self.toDoItem.completed = NO;
    }
}


@end

在文本字段的连接检查器中,从 "Outlets" - "delegate" 部分下的 "circle" 拖动到视图控制器图标。或者您可以在 viewDidLoad 方法中设置它。有些喜欢:

self.textField.delegate = self;

最后一个 textField 正在关闭键盘,因为您告诉键盘放弃其第一响应者条件。只需将该行替换为您要调用的行:

[self shouldPerformSegueWithIdentifier:@"YOUR_IDENTIFIER" sender:your_sender];

就是这样!