inputAccessoryView 出现键盘时不调用

Posted

技术标签:

【中文标题】inputAccessoryView 出现键盘时不调用【英文标题】:inputAccessoryView Not calling when keyboard appearing 【发布时间】:2015-05-11 09:38:05 【问题描述】:

我已将InputAccessoryView添加到我的键盘消失。它炒得很好。但在某些ViewController 中它没有出现。即使那个方法也不会调用。

我有一个按钮。当我点击我的文本字段时,它会自动成为第一响应者。 (单击该按钮时光标聚焦在文本字段上)键盘来了,但输入附件视图没有来。

我正在 ios 8.2 设备上对此进行测试。 这是我的代码

viewDidload

 // for search------------------
UIView *srchPadView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20, 30)];
[srchtextbox setLeftView:srchPadView];
[srchtextbox setLeftViewMode:UITextFieldViewModeAlways];
srchtextbox.attributedPlaceholder=[[NSAttributedString alloc] initWithString:alertStrings.strSearch attributes:@NSForegroundColorAttributeName: [UIColor colorWithRed:1 green:1 blue:1 alpha:0.6]];
[srchtextbox setTextColor:[UIColor whiteColor]];
srchtextbox.delegate=self;

[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(textFieldTextDidChangeOneCI:)
 name:UITextFieldTextDidChangeNotification
 object:srchtextbox];

在文本字段中更改方法

-(void)textFieldTextDidChangeOneCI:(NSNotification *)notification
 

    isSearching=YES;
    [NSObject cancelPreviousPerformRequestsWithTarget:self
                                         selector:@selector(getSongs)
                                           object:nil];

    loading=YES;
    [mainactivityindicator startAnimating];
    songsArray=[[NSMutableArray alloc]init];
    songstable.hidden=YES;
    startRec=0;

    [self performSelectorInBackground:@selector(getSongs) withObject:nil];



然后

- (UIView *)inputAccessoryView 
if (!inputAccessoryView) 
    CGRect accessFrame = CGRectMake(0.0, 0.0, 320, 40);
    inputAccessoryView = [[UIView alloc] initWithFrame:accessFrame];
    inputAccessoryView.backgroundColor = [UIColor colorWithRed:70.0/255 green:70.0/255.0 blue:70.0/255.0 alpha:0.9];

    UIView *line=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 1)];
    [line setBackgroundColor:[UIColor colorWithRed:134.0/255.0 green:139.0/255.0 blue:143.0/255.0 alpha:1.0]];
    [inputAccessoryView addSubview:line];

    UIButton *compButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    compButton.frame = CGRectMake(260.0, 2, 60, 37.0);
    [compButton.titleLabel setTextAlignment:NSTextAlignmentCenter];
    [compButton setTitle: @"Done" forState:UIControlStateNormal];
    [compButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [compButton addTarget:self action:@selector(completeCurrentWord:)
         forControlEvents:UIControlEventTouchUpInside];
    [inputAccessoryView addSubview:compButton];




    return inputAccessoryView;

终于

-(IBAction)completeCurrentWord:(id)sender
[self.view endEditing:YES];

但我的inputAccessoryView 从不打电话。这是为什么。我怎么解决这个问题?请帮帮我。

谢谢

【问题讨论】:

你在哪里调用你的函数- (UIView *)inputAccessoryView 【参考方案1】:

你需要

    覆盖方法inputAccessoryView 并返回您的视图。 覆盖方法:
    -(BOOL)canBecomeFirstResponder
        return YES;
    

3.当您需要输入附件视图可见时,请致电[self becomeFirstResponder];

提示: 如果你想一直显示

-(void)viewDidAppear:(BOOL)animated
    [super viewDidAppear:animated];
    [self becomeFirstResponder];

【讨论】:

另外,在viewWillDisappear: 中调用[self resignFirstResponder]; 以动画方式将其关闭:)

以上是关于inputAccessoryView 出现键盘时不调用的主要内容,如果未能解决你的问题,请参考以下文章

InputAccessoryView 使用键盘交互显示/隐藏上下移动表格视图

优雅地将 UIView 移动到键盘的 inputAccessoryView

旋转后Swift inputAccessoryView未附加到键盘

inputAccessoryView 未显示在键盘上方

将视图用作 inputAccessoryView 时如何防止键盘添加自己的高度约束

如何在 inputAccessoryView 内的 UILabel 中使用 AutoScrollLabel?