Я использую ViewDeck и хочу показать UISearchbar внутри leftController
.
Теперь проблема в том, что если я открою левую часть, содержащую навигацию, правый бит перекрывает мое поле поиска.
Я избавился от этого, переписав UISearchBar
, текстовое поле всегда будет иметь одинаковую ширину, но в одном случае есть перекрытие ViewDeck, а в другом случае я скрываю бит ViewDeck, и тогда кнопка отмены занять место:
Подкласс UISearchBar
#import "ViewDeckSearchBar.h"
#define kViewDeckPadding 55
@interface ViewDeckSearchBar()
@property (readonly) UITextField *textField;
@end
@implementation ViewDeckSearchBar
static CGRect initialTextFieldFrame;
- (void) layoutSubviews {
[super layoutSubviews];
// Store the initial frame for the the text field
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
initialTextFieldFrame = self.textField.frame;
});
[self updateTextFieldFrame];
}
-(void)updateTextFieldFrame{
int width = initialTextFieldFrame.size.width - (kViewDeckPadding + 6);
CGRect newFrame = CGRectMake (self.textField.frame.origin.x,
self.textField.frame.origin.y,
width,
self.textField.frame.size.height);
self.textField.frame = newFrame;
}
-(UITextField *)textField{
for (UIView *view in self.subviews) {
if ([view isKindOfClass: [UITextField class]]){
return (UITextField *)view;
}
}
return nil;
}
@end
Класс ViewController
В моем классе навигации мне нужно переписать эти два UISearchbarDelegate
метода, чтобы перейти к полноэкранному режиму с результатами поиска:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{
[self.viewDeckController setLeftSize:0];
// I am also using scopes, which works fine (they fade out when not searching)
self.searchBar.scopeButtonTitles = @[@"Food",
@"Beverages",
@"Misc"];
}
-(void)searchBarTextDidEndEditing:(UISearchBar *)searchBar{
self.viewDeckController.leftSize = 55;
}
Результат
ViewDeck показывает справа:
a http://i5.minus.com/jA34MnXVqPZez.png
Поиск в полноэкранном режиме (кнопки и кнопки области видимости анимированы).
a http://i2.minus.com/jjKEgXLur1kH6.png