2012-04-05 122 views
1

我有一個帶有工具欄的導航控制器。當鍵盤出現時,我讓工具欄也出現在鍵盤的頂部。當我關閉鍵盤時,工具欄消失,在屏幕底部留下一個黑色的矩形,工具欄應該沒有鍵盤。隱藏鍵盤時工具欄消失

下面是如何初始化工具欄:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self.navigationController setToolbarHidden:NO]; 

    // this makes sure the toolbar appears on top of the keyboard 
    // instead of going below it. 
    // _nameText is a UITextField 
    _nameText.inputAccessoryView = self.navigationController.toolbar; 
} 

這是我如何隱藏鍵盤:

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
    [self.navigationController setToolbarHidden:NO]; // this doesn't help 
    return NO; 
} 

我試着也做的[self.view setNeedsLayout],但沒有奏效。

編輯:我懷疑這可能與我分配工具欄作爲我的文本字段的輸入附件視圖的事實。我認爲當鍵盤消失時,文本字段會隱藏它的附件視圖。我仍然不知道如何重寫該行爲。

編輯2:我發現self.navigationController.toolbar.superviewnil鍵盤消失後。

+0

嘗試再次將'self.navigationController.toolbar'添加到視圖(無鍵盤)。 – tipycalFlow 2012-04-05 05:28:35

+0

試過了,不起作用。工具欄:(1)出現在屏幕的頂部,(2)瞬間消失。我試過'[self.view addSubview:self.navigationController.toolbar]'。 – Macondo2Seattle 2012-04-05 05:32:13

+0

看起來您已將工具欄移出可見性。請將您的代碼發佈到虛擬鍵盤上方以及隱藏鍵盤時移動工具欄。在隱藏鍵盤後,您可以嘗試'NSLog'工具欄的框架 – tipycalFlow 2012-04-05 05:44:31

回答

0

好的,雖然我無法正面解決問題,但我找到了一個可接受的解決方法。

  1. 創建的.xib爲您的工具欄

  2. 負荷(1)爲對象

  3. 分配一個對象到你的文本字段的inputAccessoryView屬性工具欄

  4. 設置此工具欄中按鈕的目標和操作,以便您可以響應點擊

你現在全部設置。您的原始工具欄(大概是在Interface Builder中創建的)僅在隱藏鍵盤時纔可見。當鍵盤可見時,原始工具欄不能被看到,但你的另一個(用上述步驟創建)現在出現在鍵盤上方。答對了!

如果任何人有一個更優雅的解決這個問題,我很樂意聽到這個消息:)

+0

當事物需要在這兩個工具欄之間同步時,這很重要。 – BollMose 2017-10-13 08:15:27

1

@BlackRider,我遇到了完全相同的問題,因爲你。這很煩人。

我不想設置2個不同的工具欄作爲解決方法,因爲我不想處理2個不同位置的工具欄按鈕的狀態。

我已經開始藉助在使用通知的答案在這裏討論的方法:iPhone: How to fix inputAccessoryView to View?

它的工作正常 - 我的直覺反應是,在不同的設備尺寸/方向努力時,我會碰到的問題。