Я работаю над простым приложением.Это приложение имеет различные текстовые поля, для которых требуется кнопка «Готово» на панели инструментов.
В настоящее время эта панель инструментов требует <10 строк кода, но мне не нравится тот факт, что для каждого текстового поля в каждом viewController мне нужно добавить телинии. </p>
Итак, есть ли способ сократить эту «настройку панели инструментов»?В идеале мне нужно было бы вызвать единственный метод, содержащий все, что мне нужно:
[self addDefaultToolbar:field]
Но затем снова добавление этого метода везде, где мне нужно, кажется немного «грязным» (возможно, это не такдостаточно ясно, что self
подразумевает, что внутри контроллера есть метод, называемый addDefaultToolBar
).
Итак, вот что я попробовал:
Я создал хорошую папку, заголовок и .m
файл.В шапке я поставил это:
#ifndef UIUtils_h
#define UIUtils_h
#import <UIKit/UIKit.h>
@interface UIUtils : NSObject
-(void)addDefaultToolbar:(UITextField *)field;
@end
#endif /* UIUtils_h */
И в файле .m
я поставил это:
#import "UIUtils.h"
@implementation UIUtils
-(void)addDefaultToolbar:(UITextField *)field{
UIToolbar *textFieldToolbar = [[UIToolbar alloc] init];
[textFieldToolbar sizeToFit];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneClick)];
UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
[textFieldToolbar setItems:[NSArray arrayWithObjects:flexSpace, doneButton, nil] animated:NO];
field.inputAccessoryView = textFieldToolbar;
}
-(void)doneClick
{
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
}
@end
И затем я вызываю это оттуда, где мне это нужно, например:
#import "UIUtils.h"
UIUtils *utils = [[UIUtils alloc] init];
[utils addDefaultToolbar:field];
Теперь, к сожалению, кнопка не работает.Клавиатура должна быть отклонена, но это не так.Во-вторых, я понятия не имею, правильно ли я делаю это.
Как мне сделать это правильно?
Редактировать:
Дальнейшие исследования показывают, что метод doneClick
не вызывается вообще.Это работает, если я добавлю doneClick
в viewController, но это своего рода побеждает цель того, чего я пытаюсь достичь здесь.