步骤五:工具条
5.1自定义一个xib描述工具条
+ (id)keyboardTool
{
return [[NSBundle mainBundle] loadNibNamed:@"MJKeyboardTool"
owner:nil
options:nil][0];
}
5.2将toolbar用view包装起来,目的不让外界修改toolbar,因为外界拿到的是UIView,而不是toolbar,就不能直接获取toolbar里面的属性了。
5.3自定义一个自定义工具条类,和xib绑定。
- (IBAction)previous;
//
上一个
- (IBAction)next;
//
下一个
- (IBAction)done;
//
完成
5.4 定义一个协议,通知代理按钮点击事件
@optional
- (void)keyboardTool:(MJKeyboardTool *)keyboardTool itemClick:(MJKeyboardToolItemType)itemType;
@end
5.5定义一个枚举类型,区分按钮
typedef
enum {
MJKeyboardToolItemTypePrevious,
//
上一个
MJKeyboardToolItemTypeNext,
//
下一个
MJKeyboardToolItemTypeDone
//
完成
} MJKeyboardToolItemType;
5.6当点击按钮时,通知代理
#pragma mark
上一个
- (void)previous
{
//
通知代理(上一个按钮被点击了)
if ([_delegate respondsToSelector:@selector(keyboardTool:itemClick:)])
{
[_delegate keyboardTool:self
itemClick:MJKeyboardToolItemTypePrevious];
}
}
#pragma mark
下一个
- (void)next
{
//
通知代理(下一个按钮被点击了)
if ([_delegate respondsToSelector:@selector(keyboardTool:itemClick:)])
{
[_delegate keyboardTool:self
itemClick:MJKeyboardToolItemTypeNext];
}
}
#pragma mark
完成
- (void)done
{
//
通知代理(完成按钮被点击了)
if ([_delegate respondsToSelector:@selector(keyboardTool:itemClick:)])
{
[_delegate keyboardTool:self
itemClick:MJKeyboardToolItemTypeDone];
}
}
5.7 让控制器作为工具条的代理,并实现工具条代理方法
#pragma mark - MJKeyboardTool代理方法
#pragma mark
点击了工具条上面的按钮就会调用
- (void)keyboardTool:(SUNKeyboardTool
*)keyboardTool itemClick:(SUNKeyboardToolItemType)itemType
{
if (itemType ==
doneKeyboardToolItemType) {
[self.view
endEditing:YES];
}else{
int index = [_fields
indexOfObject:_focusedField];
if (itemType ==
previousKeyboardToolItemType) {
index--;
}else{
index++;
}
//
变成第一响应者
[_fields[index]
becomeFirstResponder];
}
}