2011-02-24 39 views
4

嗨,我一直在關注如何在用戶單擊工具欄按鈕項目時顯示彈出窗口。它工作正常,但我想在用戶點擊到textField時顯示彈出窗口。這似乎是一些小的調整。就像更改IBAction 「showPopover」方法一樣。這是代碼的樣子該方法:當用戶點擊進入文本字段時顯示彈出窗口?

- (IBAction)showPopover:(id)sender{ 

    if(popoverController == nil){ //make sure popover isn't displayed more than once in the view 
     popoverController = [[UIPopoverController alloc]initWithContentViewController:popoverDetailContent]; 

    [popoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    popoverController.delegate = self; 
    } 
} 

有一個又一個實例方法比「presentPopoverFromBarItem」那個叫 其他「presentPopoverFromRect」試用我用的呢?我試圖爲它寫代碼,但我不知道如何將它與我的TextField相關聯,或者如何繪製矩形需要。可以幫助我嗎?謝謝。

回答

9

您必須使用文本框的委託方法textViewShouldBeginEditing:

事情是這樣的:

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView { 
    if(popoverController == nil){ //make sure popover isn't displayed more than once in the view 
     popoverController = [[UIPopoverController alloc]initWithContentViewController:popoverDetailContent]; 
    } 
    [popoverController presentPopoverFromRect:textView.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    popoverController.delegate = self; 
    return NO; // tells the textfield not to start its own editing process (ie show the keyboard) 
} 
+0

這是合理的!謝謝! textView.frame只是採用textView的默認大小?我將如何爲第一個參數創建一個自定義矩形視圖? – serge2487 2011-02-24 05:03:56

+0

我在我看來有5個文本字段,但我只需要在一個字段中使用它。 – chandru 2013-12-18 10:24:33

+0

@chandru給你想要的文本視圖分配一個標籤,你可以通過比較 - (BOOL)textViewShouldBeginEditing:(UITextView *)textView回調方法中的標籤來識別該文本視圖。 – 2014-04-28 10:17:29

1

是的,有一個presentPopoverFromRect方法。

要連接到UITextField,您需要實現UITextFieldDelegate並從textFieldDidBeginEditing方法調用showPopover代碼。

您使用的矩形應該是TextField的矩形。

+0

感謝您的意見! – serge2487 2011-02-24 05:04:28

+0

我在我看來有5個文本字段,但我只需要在一個字段中使用它。 – chandru 2013-12-18 10:26:21

8

對於那些誰想要顯示酥料餅,但不希望以顯示鍵盤當文本字段竊聽,這裏是我一直使用的解決方案(注意,這比以前的答案不同textFieldShouldBeginEditing):

/* 
* Handle when text field is about to start edit mode 
*/ 
- (BOOL)textFieldShouldBeginEditing:(UITextField *) textField 
{ 
    // Create popover controller if nil 
    [self.myPopover presentPopoverFromRect:textField.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    return NO; 
} 

希望這有助於!

+0

我在我的視圖中有5個文本字段,但我只需要在一個字段中使用 – chandru 2013-12-18 10:26:41

+0

Chandru,爲您的文本字段設置標記,然後在textFieldShoudlBeginEditing方法中,檢查標記,如下所示: 'if(textField.tag = 5)' – w3bshark 2013-12-18 18:52:56

+0

雅,謝謝你@ tycon712 – chandru 2013-12-19 05:31:40

1

如果您的textField位於表格單元格內,您的彈出窗口將指向屏幕的頂部,因爲textField框架的框架引用了包含文本框的視圖。所以你需要給它正確的視圖參考。您需要使用textField.superview作爲您的視圖參考。

- (BOOL)textFieldShouldBeginEditing:(UITextField *) textField 
{ 
    ... 
    [self.myPopover presentPopoverFromRect:textField.frame inView:textField.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    return NO; 
} 
相關問題