iphone - 自定义 UISearchBar 键盘

标签 iphone objective-c ios uikeyboard

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

最佳答案

我认为你只能改变“返回”键。据我所知,苹果不允许进行更多更改...所以这是我为您提供的教程:

事实上,所有其他键盘类型(除了非常相似的 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 方法中要做的就是找到键盘 View 并向其添加按钮。正如其他人已经弄清楚的那样,键盘 View 是我们应用程序的第二个 UIWindow 的一部分(请参阅此线程)。因此,我们引用该窗口(在大多数情况下它将是第二个窗口,因此下面代码中的 objectAtIndex:1 就可以了),遍历其 View 层次结构,直到找到键盘并添加左下角按钮:

- (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];
    }
}

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

The final one

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

这里是项目链接:

project

关于iphone - 自定义 UISearchBar 键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12706731/

相关文章:

iphone - 将自定义部分与 NSFetchedResultsController 一起使用?

iphone - 如何根据位置修改空 UITableViewCell 对象的背景颜色?

iphone - 如何修复自动释放对象的内存泄漏

ios - iOS 上新的 Facebook 登录重定向流程

ios - 以编程方式使用自动布局将 subview 添加到 UICollectionView 不起作用

ios - iPhone 蓝牙 : specification of the native camera app control

ios - swift 中的 NavigationController 导致黑屏

iphone - Segue 未执行 ios

objective-c - 什么用于核心数据排序?

ios - Estimote SDK 的 undefined symbol 链接器失败