2015-03-04 5 views
0

У меня возникла небольшая проблема в приложении, над которым я работаю. Я хотел бы расширить панель навигации, чтобы поддерживать поле поиска, такое как управление. Пользователь нажимает кнопку поиска в верхней правой кнопке на панели навигации, а затем панель навигации будет расширяться, открывая поле поиска с кнопкой поиска и отмены. Я достиг следующее с помощью этой реализации:Навигационная панель 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]; 
    }]; 
} 

enter image description here

управления содержит UITextField внутри.

Проблема

Однако, даже если этот код делает именно то, что я хочу, когда я нажимаю в текстовом поле, клавиатура не отображается. Это похоже на то, что контакт не регистрируется. Я пробовал комментировать код, где я явно устанавливал фрейм для xib, и когда я это делаю, событие touch распознается, но xib находится поверх панели навигации и не выглядит как естественное расширение панели, которая Что мне нужно. Любые советы или советы будут оценены.

ответ

0

Вы можете попробовать добавить код к вашему методу "- (SearchForm *) feedSearchForm".

[_feedSearchForm.txtSearchField becomeFirstResponder]; 
+0

Я пробовал этот подход как в методе feedSearchForm, так и в подклассе init для xib, оба из которых не работают. Я читал на других сообщениях, что вы не можете делать то, что я пытаюсь сделать, потому что панель навигации имеет заданную высоту, а subviews на панели навигации не обязательно являются частью контроллера вида. Возможно, я ошибаюсь, но это то, что я узнал до сих пор. – zic10

Смежные вопросы