如何在键盘的工具栏和视图控制器之间建立连接?

时间:2017-08-03 22:59:41

标签: ios swift

我有一个带有标签的表格,我想在按下按钮后转到下一个和上一个标签,但问题是工具栏存在于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) {
    //
}

我知道我可能会收到错误,因为当前视图控制器和工具栏之间没有实际连接,但我不确定如何在它们之间建立连接。

这是我所指的截图。 Screenshot

1 个答案:

答案 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;