iphone - UISearchBar 右对齐放大镜图标

标签 iphone ios cocoa-touch uikit uisearchbar

在Cocoa-Touch中我们找到了一个控件UISearchBar。我需要对其进行自定义,以便文本字段中出现的搜索图标(我们单击它执行相应的操作)右对齐。通常我们会发现它左对齐。有可能这样做吗?做过研发但是没找到...

我该怎么做?有什么好的教程可以找到吗?

最佳答案

不幸的是,UISearchBar 并不是为了直接支持这一点而设计的。在完成我们想要的事情时,我们可能不得不使用在视觉或功能方面做出妥协的变通办法,或者编写大量自定义代码。

我概述了一些接近我们想要的并且可能有用的方法。

访问 subview 方法

UISearchBar 中的文本是一个 UITextField,它是 UISearchBar 的 subview ,可以通过通常的方式访问,即 view.subviews.

放大镜搜索图标是 leftView 中的 UIImageView UITextField 的属性。我们可以使用以下代码将其切换到右侧:

// The text within a UISearchView is a UITextField that is a subview of that UISearchView.
UITextField *searchField;
for (UIView *subview in self.searchBar.subviews)
{
    if ([subview isKindOfClass:[UITextField class]]) {
        searchField = (UITextField *)subview;
        break;
    }
}

// The icon is accessible through the 'leftView' property of the UITextField.
// We set it to the 'rightView' instead.
if (searchField)
{
    UIView *searchIcon = searchField.leftView;
    if ([searchIcon isKindOfClass:[UIImageView class]]) {
        NSLog(@"aye");
    }
    searchField.rightView = searchIcon;
    searchField.leftViewMode = UITextFieldViewModeNever;
    searchField.rightViewMode = UITextFieldViewModeAlways;
}

这给了我们以下结果:

Search Bar 1

如您所见,图标超出了圆角矩形的边缘,透明图标消失了。此外,rightView属性用于其他内容,例如搜索结果按钮和书签按钮。将搜索图标放在此处可能会以某种方式与此功能冲突,即使您能够使用偏移量填充来适当定位它也是如此。

至少,您可以使用这种方法将图标提取为 UIImageView 并将其明确定位在您认为合适的位置,就像您定位任何其他 View 一样,并编写自定义代码来处理点击事件等。

自定义外观方法

iOS v5.0 及更高版本中,您可以使用列出的方法自定义搜索栏的外观 here .以下代码使用偏移量在 UISearchBar 中定位图标和文本:

[self.searchBar setPositionAdjustment:UIOffsetMake(255, 0) forSearchBarIcon:UISearchBarIconSearch];
[self.searchBar setSearchTextPositionAdjustment:UIOffsetMake(-270, 0)];

在宽度为 320 的标准 UISearchBar 上,它如下所示:

Search Bar 2

这将使与图标相关的所有事件功能按预期工作,但不幸的是 UITextField 很困惑,尽管它很宽,但它只显示其文本的一小部分。如果您能找到一种方法让文本显示超出它认为是 UITextField 的结尾,这可能是您最好的选择。

关于iphone - UISearchBar 右对齐放大镜图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15847745/

相关文章:

ios - 如何在iPhone上的xmpp中获取用户组?

iphone - 如何在 UITextView 中实现简单的 'live' 字数统计

iphone - 为旧版本的 Xcode 集成 Facebook SDK 以支持 iOS 5 和 iOS 6

ios - 带有静态库的项目中的 KIF

ios - Objective-C中基于触摸的图像处理

iphone - 如何创建类似 NSURLConnection 的东西?

ios - UIImageView 内的 UIButton 不响应点击

iphone - NSOperations 或 NSThread 用于突发不断相互取消的较小任务?

ios - Superview 没有收到触摸事件

iphone - 如何读取和编写像 iPhone 笔记应用程序一样工作的 plist