2013-04-11 60 views
0

有沒有一種方法可以計算/檢測PopOverController是否位於View頂部?如果是這樣,讓它顯示allowedArrowDirections:UIPopoverArrowDirectionDown vs allowedArrowDirections:UIPopoverArrowDirectionUp取決於如果你在視圖的底部或頂部,或者如果有足夠的空間來顯示popOverControl沒有調整大小?替代方法我正在考慮滾動視圖向下或向上如果沒有足夠的空間,但我想利用allowedArrowDirections:UIPopoverArrowDirectionDown和allowedArrowDirections:UIPopoverArrowDirectionUp。有什麼建議麼?PopOverController在視圖頂部調整大小

+1

你必須檢查你的觸摸點的Y位置。根據 – Hiren 2013-04-11 16:01:52

+0

計算房間並顯示,那麼視圖絕對頂部的座標是什麼?我必須獲得UIWindow的Y座標嗎?或者是最容易的0? – wilforeal 2013-04-11 19:31:56

+0

你可以通過觸摸事件來檢查 – Hiren 2013-04-12 04:45:49

回答

0

您不應該計算popover控制器放置視圖的位置。 popover控制器旨在讓您指定箭頭指向的位置,以及將彈出窗口添加到的視圖。然後popover控制器會計算它有空間顯示其彈窗視圖的位置。

但是,如果您可以通過指定一個或多個UIPopoverArrowDirection來限制popover控制器放置彈出視圖的位置。例如,假設您有一個較大的視圖(視圖A),並且視圖A左側有一個較小的子視圖(視圖B)。如果要顯示位於視圖B右側的按鈕視圖的彈出窗口,當你出現了,你可以告訴酥料餅的控制器僅能顯示中顯示其酥料餅的視圖按鈕的邊框的右側,像這樣:

[popoverController presentPopoverFromRect: buttonView.frame 
            inView: viewA 
       permittedArrowDirections: UIPopoverArrowDirectionLeft 
           animated: YES]; 

編輯

燦您將在包含表視圖的視圖的座標空間中獲取文本字段的框架?

CGRect frame = [tableView.superview convertRect: textField.frame fromView: textField.superview]; 
[popoverController presentPopoverFromRect: frame 
            inView: tableView.superview 
       permittedArrowDirections: UIPopoverArrowDirectionLeft 
           animated: YES]; 

假設tableView的超級視圖足夠大以滿足您的需求,這應該適應彈出窗口的顯示。

+0

在當前的項目我工作我有PopOver在UITableviewCell裏面的UITextField頂部顯示。如果Im在UItableviewCell的頂部,則UIPopOverControl調整爲較小的大小,從而防止項目可見。我必須在位於頂部或在UITextField – wilforeal 2013-04-11 16:40:44

+0

@wilforeal我已根據您最後的評論編輯我的答案。 – 2013-04-11 20:47:14

0

拿到後,你得到的X和Y點,你可以計算出可用空間打開您的PopOverController在你的觸摸從

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    CGPoint touchPoint = [touch locationInView:myView]; 
    NSLog("%lf %lf", touchPoint.x, touchPoint.y); 
} 

協調。

請讓我知道如果您需要進一步的幫助