工具栏上下button逻辑

我正在使用下面的代码移动到下一个领域使用UITextField委托,也是我添加一个工具栏的键盘与上一个,下一个和确定的button。 代码工作正常。

就像你看到的键盘返回button的逻辑是非常通用的,使用UITextField标签,这是很好的,因为我要使用一段代码。 现在我需要编写上一个和下一个button的逻辑,我迷路了。 有任何想法吗?

更新 (完整的代码,有一些修改,感谢@ 8vius,在聊天中花了一些时间,使其工作):

// // SigninViewController.m // #import "SigninViewController.h" @implementation SigninViewController @synthesize firstResponder = _firstResponder; @synthesize toolbar; @synthesize email; @synthesize password; - (void)move:(UIBarButtonItem*)sender { NSInteger tag = self.firstResponder.tag; if ([sender.title isEqualToString:@"Anterior"]) { tag -= 1; } else if ([sender.title isEqualToString:@"Próximo"]) { tag += 1; } UITextField *nextTextField = (UITextField*)[self.view viewWithTag:tag]; if (nextTextField && tag > 0) { [nextTextField becomeFirstResponder]; } else { [self.firstResponder resignFirstResponder]; self.firstResponder = nil; } } - (void)ok:(id)sender { [self.view endEditing:YES]; self.firstResponder = nil; } - (void)textFieldDidBeginEditing:(UITextField*)textField { self.firstResponder = textField; } - (BOOL)textFieldShouldReturn:(UITextField*)textField { NSInteger tag = textField.tag + 1; UITextField *nextTextField = (UITextField*)[self.view viewWithTag:tag]; if (nextTextField) { [nextTextField becomeFirstResponder]; } else { [textField resignFirstResponder]; self.firstResponder = nil; } return NO; } - (void)viewDidLoad { [super viewDidLoad]; self.email.delegate = self; self.password.delegate = self; if (self.toolbar == nil) { self.toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)]; UIBarButtonItem* previous = [[UIBarButtonItem alloc] initWithTitle:@"Anterior" style:UIBarButtonItemStyleBordered target:self action:@selector(move:)]; UIBarButtonItem* next = [[UIBarButtonItem alloc] initWithTitle:@"Próximo" style:UIBarButtonItemStyleBordered target:self action:@selector(move:)]; UIBarButtonItem* space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:(UIBarButtonSystemItemFlexibleSpace) target:nil action:nil]; UIBarButtonItem* ok = [[UIBarButtonItem alloc] initWithTitle:@"Ok" style:UIBarButtonItemStyleBordered target:self action:@selector(ok:)]; [self.toolbar setItems:[[NSArray alloc] initWithObjects:previous, next, space, ok, nil]]; [self.toolbar setTranslucent:YES]; [self.toolbar setTintColor:[UIColor blackColor]]; } for (UIView* view in self.view.subviews) { if ([view isKindOfClass:[UITextField class]]) { [(UITextField*)view setInputAccessoryView:toolbar]; } } } - (void)viewDidUnload { self.email = nil; self.password = nil; [super viewDidUnload]; } @end 

这很简单,当你加载你的视图时,你根据你想要的顺序在你的文本字段上设置tag属性,那么你必须遍历字段上的标签元素:

 - (void)toggleTextfield:(UIBarButtonItem *)sender { NSInteger nextTag = self.firstResponder.tag; if ([sender.title isEqualToString:@"Previous"] && nextTag > 1) { nextTag -= 1 } else if ([sender.title isEqualToString:@"Next"]) { nextTag += 1; } UITextField *nextTextField = (UITextField *)[self.view viewWithTag:nextTag]; if (nextTextField) { [nextTextField becomeFirstResponder]; } } 

并跟踪谁是第一响应者:

 -(void)textFieldDidBeginEditing:(UITextField *)textField { self.firstResponder = textField; } - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; self.firstResponder = nil; return YES; } 

当你加载你的视图,你将button绑定到切换操作:

  UIBarButtonItem *previousButton = [[UIBarButtonItem alloc] initWithTitle:@"Previous" style:UIBarButtonItemStyleBordered target:self action:@selector(toggleTextfield:)]; UIBarButtonItem *nextButton = [[UIBarButtonItem alloc] initWithTitle:@"Next" style:UIBarButtonItemStyleBordered target:self action:@selector(toggleTextfield:)]; 

就我而言,例如,我在表格视图中设置了文本字段,因此在我的cellForRowAtIndexPath方法中,我将tag属性设置为indexPathrow

编辑:你必须设置firstResponder属性为它的工作。

在你的.h文件中:

 @property UIView *firstResponder 

在你的.m文件中:

 @synthesize firstResponder = _firstResponder;