Пользовательские представления не отключают клавиатуру?

Пробовали [[self jotNotes] resignFirstResponder]; , пробовали [self endEditing:YES];

Итак, у меня есть NoteViewController, который наследует UIViewController и пытается реализовать делегат следующим образом.

@interface NOTEController : UIViewController <UITextViewDelegate>
@end

@implementation NOTEController 
-(id)init {
  self = [super init];
    if (self) {
    //  self.delegate = self; //doesnt let me set this, so i assume i do not do that here
      NOTEControllerView * mainView = [[NOTEControllerView alloc] initWithFrame:[UIScreen mainScreen].bounds];
      self.view = mainView; //just a plain custom uiview subclass its boring and not special
    }
  return self;
}
@end

а затем в mainView у меня есть куча подвидов, которые в основном представляют собой квадрат с UITextView внутри.

класс квадратов такой, и именно из них я пытаюсь отключить клавиатуру, здесь я устанавливаю делегата, метод отклонения KB и код UITextView. В настоящее время он будет регистрировать мой метод клавиатуры при нажатии кнопки «Готово», но клавиатура все еще присутствует. Был бы очень признателен, если бы кто-нибудь помог мне понять, почему

@interface NOTESubview : UIView <UITextFieldDelegate>
@property (nonatomic, weak) id<UITextFieldDelegate> delegate;
-(UITextView *)jotNotes;
@end

@implementation NOTESubview
-(id)initWithFrame:(CGRect)arg1 {
  self = [super initWithFrame:arg1];
    if (self) {
        self.delegate = self;
        [self addSubview:[self jotNotes]];
    }
  return self;
}
-(UITextView *)jotNotes {
  UITextView * jotNotes = [[UITextView alloc] initWithFrame:CGRectMake(0, self.frame.size.height/5.7, self.frame.size.width, self.frame.size.height -  self.frame.size.height/5.7)];
  UIToolbar* keyboardTextViewBar = [[UIToolbar alloc] init];
  keyboardTextViewBar.barStyle = UIBarStyleDefault;
  [keyboardTextViewBar sizeToFit];
   UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
   UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                    style:UIBarButtonItemStylePlain target:self
                    action:@selector(dismissKB:)];
  [keyboardTextViewBar setItems:[NSArray arrayWithObjects:flexSpace, doneButton, nil]];
  jotNotes.inputAccessoryView = keyboardTextViewBar;
  jotNotes.delegate = self.delegate;
  return jotNotes;
}
-(void)dismissKB:(UIBarButtonItem *)sender {
  //this will log, so im not sure why it wont resign the board no matter what i try
  NSLog(@"keyboard attempted to dismiss by %@", sender);
  [[self jotNotes] resignFirstResponder];
}

person user286152    schedule 30.06.2017    source источник


Ответы (2)


Я подозреваю, что когда вызывается метод rejectKB, на самом деле это не тот, кто в настоящее время является первым ответчиком.

Однако есть трюк, с помощью которого вы можете просто «отключить клавиатуру» из любого места в вашем приложении. Возможно, вы захотите попробовать:

[[[[UIApplication sharedApplication] delegate] window] endEditing:YES];
person Pochi    schedule 30.06.2017

Добавьте следующую строку, где вы пытаетесь закрыть клавиатуру:

[self endEditing:YES];
person YaBoiSandeep    schedule 30.06.2017