Это не прямой ответ, так как вы спросили о том, как справиться с потерей фокуса. Я думаю, что бывают моменты, когда неплохо иметь явные кнопки сохранения и отмены, которые нужно отменить. Особенно в текстовом представлении, где вы хотите сохранить ключ возврата для его предполагаемого использования.
Это класс, который добавляет на клавиатуру панель инструментов с кнопками «Готово» и «Отмена». У меня это работает в iOS 8 прямо сейчас. Я довольно новичок в iOS, так что, возможно, есть лучшие способы сделать это. Всегда открыт для предложений о том, как улучшить.
DismissableTextView.h ...
#import <UIKit/UIKit.h>
@interface DismissableTextView : UITextView
@end
DismissableTextView.m ...
#import "DismissableTextView.h"
@implementation DismissableTextView
- (instancetype)init
{
self = [super init];
if (self) {
[self setInputView];
}
return self;
}
- (id) initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
[self setInputView];
}
return self;
}
- (void)awakeFromNib
{
[super awakeFromNib];
[self setInputView];
}
- (void) setInputView {
[self createToolbar];
}
-(void) createToolbar {
// Create toolbar for the keyboard so it can be dismissed...
UIToolbar* toolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
toolbar.barStyle = UIBarStyleDefault;
toolbar.items = [NSArray arrayWithObjects:
[[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(cancelClicked)],
[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
[[UIBarButtonItem alloc]initWithTitle:@"Apply" style:UIBarButtonItemStyleDone target:self action:@selector(doneClicked)],
nil];
[toolbar sizeToFit];
self.inputAccessoryView = toolbar;
}
- (IBAction)didBeginEditDescription:(id)sender
{
}
-(void)cancelClicked{
// respond to cancel click in the toolbar
[self resignFirstResponder];
}
-(void)doneClicked{
// respond to done click in the toolbar
[self resignFirstResponder];
}
@end