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 7 的 UITextField 中添加带有缩进的图像 UIImage?
在 iOS 8 中使用 UIPickerview 作为 UITextfield 的输入视图时崩溃
UITextField - (void)drawPlaceholderInRect:(CGRect)rect 在 iOS 7 中返回不同的 CGRect 高度