2015-05-12 5 views
0

У меня есть панель инструментов и этот код, чтобы узнать, как установить его выше клавиатуры, когда я его открываю, но после этого или на клавиатуре.как сделать панель инструментов вверх Клавиатура

#import "ViewController.h" 

@interface ViewController() 

@property (weak, nonatomic) IBOutlet UITextView *textField; 
@property (weak, nonatomic) IBOutlet UIToolbar *toolbar; 


@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.textField.delegate = self; 
    self.toolbar.delegate = self; 
    self.textField.inputAccessoryView = self.toolbar; 

    self.textField.inputView = self.toolbar; 
    [self.toolbar removeFromSuperview]; 
    [self.textField becomeFirstResponder]; 

} 

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 


    self.textField.inputAccessoryView = self.toolbar; 
} 

ответ

1

Ваша линия [self.toolbar removeFromSuperview]; приводит к тому, что панель инструментов становится nil, поэтому он не появляется.

И как @jammycoder сказал, что вам нужно только установить inputAccessoryView текстового поля. Так что, как он предложил и удалить строку self.textField.inputView = self.toolbar;

Редактировать

Я установки простой проект и поставить UIToolbar и UITextView на контроллере представления, в раскадровке. Эти два вида подключены (IBOutlets) к ViewController, так как вы возможно сделал ,.

Если я использую ваш код, он действительно не отображает клавиатуру, почему? Поскольку вы назначаете inputViewUITextView.

Итак, давайте отлаживаем ваш код. Прежде всего добавьте букет из NSLog таких утверждений.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.textField.delegate = self; 

    NSLog(@"1 %@", NSStringFromCGRect(self.toolbar.frame)); 
    self.textField.inputAccessoryView = self.toolbar; 

    NSLog(@"2 %@", NSStringFromCGRect(self.toolbar.frame)); 
    self.textField.inputView = self.toolbar; 

    NSLog(@"3 %@", NSStringFromCGRect(self.toolbar.frame)); 
    [self.toolbar removeFromSuperview]; 

    NSLog(@"4 %@", NSStringFromCGRect(self.toolbar.frame)); 
    [self.textField becomeFirstResponder]; 
} 

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 
    NSLog(@"5 %@", NSStringFromCGRect(self.toolbar.frame)); 
    self.textField.inputAccessoryView = self.toolbar; 

    NSLog(@"6 %@", NSStringFromCGRect(self.toolbar.frame)); 
} 

Это будет печатать что-то вроде:

2015-05-14 00:13:46.313 ToolbarKeyboard[8367:4583306] 1 {{0, 524}, {320, 44}} 
2015-05-14 00:13:46.314 ToolbarKeyboard[8367:4583306] 2 {{0, 524}, {320, 44}} 
2015-05-14 00:13:46.314 ToolbarKeyboard[8367:4583306] 3 {{0, 524}, {320, 44}} 
2015-05-14 00:13:46.315 ToolbarKeyboard[8367:4583306] 4 {{0, 524}, {320, 44}} 
2015-05-14 00:13:46.491 ToolbarKeyboard[8367:4583306] 5 {{0, 0}, {320, 0}} 
2015-05-14 00:13:46.491 ToolbarKeyboard[8367:4583306] 6 {{0, 0}, {320, 0}} 

Таким образом, мы обнаружили, что, так или иначе, ваш рост бар стал 0. И, честно говоря, я не знаю, почему, но позволяет продолжать наши отладки.

Как указано на @jammycoder вы сделать не необходимость в в inputView из UITextView вам только нужно сделать, если вы хотите пользовательской клавиатуры. Так что давайте изменим код, чтобы быть похожим на это:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.textField.delegate = self; 

    NSLog(@"1 %@", NSStringFromCGRect(self.toolbar.frame)); 
    self.textField.inputAccessoryView = self.toolbar; 

    NSLog(@"2 %@", NSStringFromCGRect(self.toolbar.frame)); 
    [self.toolbar removeFromSuperview]; 

    NSLog(@"3 %@", NSStringFromCGRect(self.toolbar.frame)); 
    [self.textField becomeFirstResponder]; 
} 

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 
    NSLog(@"4 %@", NSStringFromCGRect(self.toolbar.frame)); 
    self.textField.inputAccessoryView = self.toolbar; 

    NSLog(@"5 %@", NSStringFromCGRect(self.toolbar.frame)); 
} 

Это напечатает, что высота панели осталась неизменной. И панель инструментов отображается над клавиатурой.

До сих пор я использовал реальное устройство для отладки, решил использовать симулятор. Подождите, он не открывает клавиатуру!Кажется, это новая функция Xcode 6, поэтому я сделал быстрый поиск и нашел этот stackoverflow: Xcode 6: Keyboard does not show up in simulator. Что говорилось в самом голосовавшем ответе, и все работает нормально.

Итак, одним словом. Следующий минимальный код приведет к желаемому поведению. И если вы используете симулятор для тестирования/отладки это убедитесь, что делать то, что описано здесь: https://stackoverflow.com/a/24497773/3927536

@interface ViewController() 

@property (weak, nonatomic) IBOutlet UITextView *textField; 
@property (weak, nonatomic) IBOutlet UIToolbar *toolbar; 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.textField.inputAccessoryView = self.toolbar; 
    [self.textField becomeFirstResponder]; 
} 

@end 
+0

Он еще не решил. Я не знаю, что я сделал неправильно. Теперь я добавил setFrame, но все еще не работаю. Спасибо за помощь! –

+1

Это правильный ответ. Вы объявили свою панель инструментов «слабым», поэтому, когда вы удаляете FromSuperView, она освобождается. Если вы хотите сохранить его, объявите его «сильным» и не удаляйте из супер-представления. Добавление его в виде дополнительного представления в другое представление приведет к удалению его из предыдущего представления. – squarefrog

+0

@ brenoMoraisHu3 проверьте обновленный ответ. –

0

Эта линия вызывает клавиатуру

[self.textField becomeFirstResponder]; 

Когда текстовое поле становится первым ответчиком он автоматически выводит на клавиатуре.

Редактировать: удалить следующую строку

self.textField.inputView = self.toolbar; 

Вам нужно только установить панель инструментов inputAccessoryView

Edit2: также удалить эту строку

[self.toolbar removeFromSuperview]; 
+0

продолжается без открытия клавиатуры –

+0

Что вы желающему случиться ?? –

+0

Я хочу открыть панель инструментов над моей клавиатурой. Проблема в том, что после того, как я настроил тулбар, ни она, ни клавиатура не появятся. Панель инструментов в этом же раскадровке textField, который откроет клавиатуру –

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