自定义UISearchBar键盘

时间:2012-10-03 10:36:38

标签: iphone objective-c ios uikeyboard

如何在iOS中自定义搜索栏键盘? 例如,在键盘上添加带有个性化按钮的工具栏(我需要数学符号 - >,∞,Σ)。 谢谢你的任何建议! 垫

1 个答案:

答案 0 :(得分:1)

我认为U只能更改“return”键。据我所知苹果不允许更改...所以这是我的教程:

实际上,每个其他键盘类型(非常相似的UIKeyboardTypePhonePad除外)确实提供了通过设置相应的UITextInputTraits实现者​​的returnKeyType属性来解除的可能性。那么如何用数字键盘达到相同的效果呢?我们找到了一个工作场所!

查看数字键盘时,您会注意到左下方有一个未使用的空间。这就是我们要插入自定义“返回”键的地方。你可以在这里看到:

First

简化:截取屏幕截图,剪切整个退格键,水平翻转,在Photoshop中清除其退格符号,并在我们的“返回”键上覆盖我们想要的文本。我们选择将其标记为“完成”。现在我们有自定义按钮UIControlStateNormal的图像。重复整个过程(在截取屏幕截图时使用触摸的退格键)为我们的按钮UIControlStateHighlighted获取第二个图像。结果如下:

Second

third

现在回到编码。首先,我们需要知道数字键盘何时会在屏幕上滑动,以便我们可以在此之前插入自定义按钮。幸运的是,有一个确切的目的通知,并注册它就像:

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardWillShow:) 
                                             name:UIKeyboardWillShowNotification 
                                           object:nil];

完成整件事后,不要忘记在相应位置从通知中心删除观察者

[[NSNotificationCenter defaultCenter] removeObserver:self];

现在我们已经了解它的核心。我们在keyboardWillShow方法中所要做的就是找到键盘视图并向其添加按钮。键盘视图是我们应用程序的第二个UIWindow的一部分,正如其他人已经想到的那样(参见此主题)。所以我们引用那个窗口(在大多数情况下它将是第二个窗口,所以下面代码中的objectAtIndex:1很好),遍历它的视图层次结构,直到找到键盘并在左下方添加按钮:

- (void)keyboardWillShow:(NSNotification *)note {  
    // create custom button
    UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
    doneButton.frame = CGRectMake(0, 163, 106, 53);
    doneButton.adjustsImageWhenHighlighted = NO;
    [doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal];
    [doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted];
    [doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];

    // locate keyboard view
    UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
    UIView* keyboard;
    for(int i=0; i<[tempWindow.subviews count]; i++) {
        keyboard = [tempWindow.subviews objectAtIndex:i];
        // keyboard view found; add the custom button to it
        if([[keyboard description] hasPrefix:@"UIKeyboard"] == YES)
            [keyboard addSubview:doneButton];
    }
}

Voilà,就是这样!我们按钮的空白区域从坐标(0,163)开始,其尺寸为(106,53)。当然,必须现在编写doneButton方法,但这不再困难。只需确保在正在编辑的文本字段上调用resignFirstResponder以使键盘向下滑动。

The final one

在这里你可以找到最终的项目......这是很多工作......希望它有所帮助......

这里是项目的链接:

project