UITextfield 在 iOS 7 中不能作为 UISearchBar 的子视图?

Posted

技术标签:

【中文标题】UITextfield 在 iOS 7 中不能作为 UISearchBar 的子视图?【英文标题】:UITextfield not working as subview to UISearchBar in iOS 7? 【发布时间】:2013-09-24 23:27:08 【问题描述】:

此代码在 ios 6 中运行良好,但在 iOS 7 中,导航栏中的文本字段是灰色的,并且不可点击?看看这张图的区别

可能有什么问题?我不知道它们在 iOS 7 中到底发生了什么变化,也不知道从哪里开始寻找解决这个问题的方法......

/问候

UITextField *sbTextField = (UITextField *)[searchBar.subviews lastObject];
[sbTextField removeFromSuperview];

CGRect rect = searchBar.frame;
rect.size.height = 32;
rect.size.width = 210;
sbTextField.frame = rect;
 // [sbTextField setKeyboardType:UIKeyboardTypeNumbersAndPunctuation]; Not working in iOS7
 // [sbTextField setPlaceholder:NSLocalizedString(@"HintSearchExercise", nil)]; Not working in iOS 7

[sbTextField setAutoresizingMask:UIViewAutoresizingFlexibleBottomMargin];
[searchBar removeFromSuperview];

UIBarButtonItem *searchBarNavigationItem = [[UIBarButtonItem alloc] initWithCustomView:sbTextField];

[[self navigationItem] setLeftBarButtonItem:searchBarNavigationItem];

【问题讨论】:

为什么要从搜索栏中删除文本字段?弄乱标准 UI 控件的私有子视图结构绝不是解决问题的好方法。 我删除了从Superview romved searchBar 的代码,结果仍然很乱:tinypic.com/view.php?pic=1056r7q&s=5#.UkIjzpKpWrg :/ 您需要显示设置颜色和外观的代码。您还应该删除所有更改文本字段任何布局的代码。使用提供的UISearchBar API 进行您需要的任何调整。不要乱用私有子视图。 【参考方案1】:

在 ios7 中,[searchBar.subviews lastObject]不是文本字段,而是一个 UIView 实例,充当控件周围的附加容器。

与cocktailicious 有同样的问题,我打算在UISearchBar 上使用以下类别:

@interface UISearchBar (Workarounds)
@property (readonly, nonatomic) UITextField *textField;
@end

@implementation UISearchBar (Workarounds)
- (UITextField *)textField

    for (UIView *view in [self subcontrols]) 
        if ([view isKindOfClass:[UITextField class]]) 
            return (UITextField *)view;
        
    
    return nil;


- (NSArray *)subcontrols

    return self.subviews.count == 1 ? [self.subviews.firstObject subviews] : self.subviews;

@end

- subcontrols 方法可以解决问题。

【讨论】:

只是想补充一下,我在使用 iOS 8.2 的 Swift 中遇到了同样的问题,并且根据您的评论,我能够修复它 同样!很有帮助。

以上是关于UITextfield 在 iOS 7 中不能作为 UISearchBar 的子视图?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中使用 UITextField 条目作为数组

UITextField右对齐iOS 7

如何在 iOS 7 的 UITextField 中添加带有缩进的图像 UIImage?

在 iOS 8 中使用 UIPickerview 作为 UITextfield 的输入视图时崩溃

UITextField - (void)drawPlaceholderInRect:(CGRect)rect 在 iOS 7 中返回不同的 CGRect 高度

右对齐 UITextField 空格键在 iOS 7 中不前进光标