我有一个带有标签的表格,我想在按下按钮后转到下一个和上一个标签,但问题是工具栏存在于UITextField扩展名中。
我正在使用选择器调用视图控制器的操作来引用其中的文本字段,但是我收到了“无法识别的选择器发送到实例”错误。
以下是UITextField扩展中的2行代码,用于添加下一个和上一个按钮。
let nextButton = UIBarButtonItem(title: “Next”, style: .plain, target: self, action: #selector(HomeViewController.nextButtonTapped(_:)))
let previousButton = UIBarButtonItem(title: “Prev”, style: .plain, target: self, action: #selector(HomeViewController.previousButtonTapped(_:)))
以下是我想要激活的HomeViewController中的函数:
func nextButtonTapped(_ sender: UIBarButtonItem) {
//
}
func previousButtonTapped(_ sender: UIBarButtonItem) {
//
}
我知道我可能会收到错误,因为当前视图控制器和工具栏之间没有实际连接,但我不确定如何在它们之间建立连接。
答案 0 :(得分:1)
1-子类UITextfield并将其设置为文本字段的类
class CustomTextField : UITextField
2-使用方法创建协议" textField:moveToTextFieldWithTag:"
@protocol CustomTextFieldDelegate <NSObject>
@required
- (void) textField:(CustomTextField*)textField moveToTextFieldWithTag:(int)tag;
@end
3-将viewcontroller设置为textfields委托。
cell.textField.delegate = viewController;
4-将indexpath.row + 1设置为textfields标签,将tableviewcells设置为+ 1标签。
cell.tag = indexPath.row + 1;
cell.textField.tag = indexPath.row + 1;
5-创建工具栏按钮
UIBarButtonItem *prevButton = [[UIBarButtonItem alloc] initWithTitle:@"prev" style:UIBarButtonItemStylePlain target:self action:@selector(prevAction)];
UIBarButtonItem *nextButton = [[UIBarButtonItem alloc] initWithTitle:@"next" style:UIBarButtonItemStylePlain target:self action:@selector(nextAction)];
6-在textfield子类上实现工具栏按钮方法。
- (void)nextAction {
int newTag = self.tag + 1;
if([self.delegate respondsToSelector:@selector(textField:moveToTextFieldWithTag:)]) {
[((id<CustomTextFieldDelegate>)self.delegate) textField:self moveToTextFieldWithTag:newTag];
} else {
[self endEditing:YES];
}
}
7-在viewController上实现协议
//.h
@interface Controller : ParentClass <CustomTextFieldDelegate>
//.m
-(void)textField:(CustomTextField *)textField moveToTextFieldWithTag:(int)tag {
UITableViewCell* celda = [self.tableView viewWithTag:tag];
UIResponder *nextResponder = [celda.contentView viewWithTag:tag];
if(nextResponder) {
[nextResponder becomeFirstResponder];
} else {
[textField resignFirstResponder];
}
}
编辑:这是我将按钮添加到工具栏的方式
UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width, 44)];
NSArray *toolbarButtons = [[NSArray alloc]initWithObjects:prevButton,nextButton, nil];
[toolBar setItems:toolbarButtons];
self.inputAccessoryView = toolBar;