У меня возникла небольшая проблема в приложении, над которым я работаю. Я хотел бы расширить панель навигации, чтобы поддерживать поле поиска, такое как управление. Пользователь нажимает кнопку поиска в верхней правой кнопке на панели навигации, а затем панель навигации будет расширяться, открывая поле поиска с кнопкой поиска и отмены. Я достиг следующее с помощью этой реализации:Навигационная панель Subview с Xib
#import <UIKit/UIKit.h> //Xib header
@interface SearchForm : UIView
@property (weak, nonatomic) IBOutlet UITextField *txtSearchField;
@property (weak, nonatomic) IBOutlet UIButton *btnCancel;
- (IBAction)btnCancel:(id)sender;
@property (weak, nonatomic) IBOutlet UIButton *btnSearch;
- (IBAction)btnSearch:(id)sender;
@end
#import "SearchForm.h" //Xib implementation
@interface SearchForm() <UITextFieldDelegate>
{
}
@end
@implementation SearchForm
- (id)initWithCoder:(NSCoder *)aDecoder
{
if ((self = [super initWithCoder:aDecoder]))
{
self.txtSearchField.delegate = self;
}
return self;
}
- (IBAction)btnCancel:(id)sender
{
DLog();
}
- (IBAction)btnSearch:(id)sender
{
}
#pragma mark Text Field Delegate
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
//TODO:Callback to feed.
return YES;
}
//Main View Controller
-(SearchForm *)feedSearchForm
{
if(!_feedSearchForm)
{
_feedSearchForm = [[[NSBundle mainBundle] loadNibNamed:@"SearchForm" owner:self options:nil] objectAtIndex:0];
//I think this frame is the problem but I'm not sure
_feedSearchForm.frame = CGRectMake(0, self.navigationController.navigationBar.frame.size.height, 320, STREAM_LIST_TOP_CONSTRAINT_HEIGHT);
}
return _feedSearchForm;
}
//Exposes the search field
-(void)expandSearchField:(id)sender
{
tableVerticalVariableConstraint.constant = STREAM_LIST_TOP_CONSTRAINT_HEIGHT;
[UIView animateWithDuration:0.4 animations:^{
[self.navigationController.navigationBar addSubview:self.feedSearchForm];
[self.view layoutIfNeeded];
}];
}
управления содержит UITextField внутри.
Проблема
Однако, даже если этот код делает именно то, что я хочу, когда я нажимаю в текстовом поле, клавиатура не отображается. Это похоже на то, что контакт не регистрируется. Я пробовал комментировать код, где я явно устанавливал фрейм для xib, и когда я это делаю, событие touch распознается, но xib находится поверх панели навигации и не выглядит как естественное расширение панели, которая Что мне нужно. Любые советы или советы будут оценены.
Я пробовал этот подход как в методе feedSearchForm, так и в подклассе init для xib, оба из которых не работают. Я читал на других сообщениях, что вы не можете делать то, что я пытаюсь сделать, потому что панель навигации имеет заданную высоту, а subviews на панели навигации не обязательно являются частью контроллера вида. Возможно, я ошибаюсь, но это то, что я узнал до сих пор. – zic10