2011-05-06 42 views
5

Có thể di chuyển một bộ điều khiển UIPopover xung quanh màn hình khi nó đã được trình bày không?
Tôi có một giao diện nhỏ trong ứng dụng có thể di chuyển một chút và tôi muốn một UIPopoverController di chuyển xung quanh với nó mà không cần phải trình bày lại UIPopoverController mỗi khi nó di chuyển. Điều này có thể không?Có thể di chuyển UIPopoverController trên màn hình không?

+0

Không phải là '[popover presentPopoverFromRect:]' làm việc cho bạn? –

+0

Câu hỏi đặt ra là liệu anh ta có thể di chuyển cửa sổ bật lên khi nó được trình bày – Sid

+0

Tôi không nghĩ rằng vị trí của nó có thể được thay đổi trực tiếp. Tuy nhiên, nếu bạn gọi presentPopoverFromRect trên nó mà không loại bỏ nó, nó sẽ "di chuyển". – Anna

Trả lời

1

Kể từ iOS 9, "UIPopoverController không được chấp nhận. Cửa sổ bật lên hiện được triển khai dưới dạng bản trình bày UIViewController. Sử dụng kiểu trình bày phương thức của UIModalPresentationPopover và UIPopoverPresentationController."

Sử dụng thông tin sau để trình bày cửa sổ bật lên. Bạn có thể thay đổi các giá trị của sourceRect và sourceView nhưng đây không phải là hành vi API dự định.

DetailViewController *detailVC = self.detailViewController; 
    detailVC.preferredContentSize = CGSizeMake(420, 92); 
    detailVC.modalPresentationStyle = UIModalPresentationPopover; 


    UIPopoverPresentationController *presController = detailVC.popoverPresentationController; 
    if (presController) { 
     presController.delegate = detailVC; 
     presController.barButtonItem = self.detailButton; 
     presController.sourceRect = self.view.frame; 
     presController.sourceView = self.view; 
     presController.permittedArrowDirections = UIPopoverArrowDirectionAny; 
    } 

    [self presentViewController: detailVC animated:YES completion:^{ 

    }]; 

Thay vào đó, tôi đề nghị giữ tham chiếu đến trình điều khiển chế độ xem được hiển thị với cửa sổ bật lên, loại bỏ cửa sổ bật lên và xuất hiện lại.

DetailViewController *detailVC = self.detailViewController; 
[self dismissViewControllerAnimated:NO completion:^{ 

    UIPopoverPresentationController *presController = detailVC.popoverPresentationController; 
    if (presController) { 
     presController.delegate = detailVC; 
     presController.barButtonItem = self.detailButton; 
     presController.sourceRect = self.view.frame; //Update frame 
     presController.sourceView = self.view; 
     presController.permittedArrowDirections = UIPopoverArrowDirectionAny; 
    } 

    [self presentViewController: detailVC animated:NO completion:^{ 

    }]; 
}]; 
+0

Tôi tiếp tục bình chọn cho điều này. Nếu bạn đang đi xuống bình chọn câu trả lời được chấp nhận này, hãy hữu ích và để lại một bình luận. –

+0

"Tạo của riêng bạn" không phải là câu trả lời tôi sẽ tìm kiếm – Loukas

+0

@Loukas Tôi hy vọng bạn sẽ thích câu trả lời mới tốt hơn. Nếu UIPopoverPresentationController không cung cấp chức năng cần thiết, bạn sẽ phải tạo lại UIPopoverController vì API không phải là rất linh hoạt. –

0

Không, bạn không thể. Đây không phải là phương pháp để làm điều đó.

pover presentPopoverFromRect: 

đã được đề cập trong các ý kiến, nhưng chú ý đến

hiện

bạn không thể đại diện mà không cần vẽ lại.

+0

Pease xem Paper by Fifty trên iPad. Họ có một cửa sổ bật lên có chứa một trường văn bản. Cửa sổ bật lên hoạt hình phía trên bàn phím và khi bàn phím bị loại bỏ, hoạt ảnh trở lại vị trí ban đầu. Việc xây dựng trong hoặc phát triển đã kết thúc? – Daniel

+0

Khi bàn phím xuất hiện, theo mặc định SDK sẽ di chuyển cửa sổ bật lên cao hơn để chứa bàn phím. Khi bàn phím bị loại bỏ, cửa sổ bật lên sẽ hoạt ảnh trở lại vị trí ban đầu của bàn phím. Đây là tất cả được xây dựng trong hành vi. – Andrew

+0

Đúng vậy. Tôi đã quên đi quan điểm của mình với bình luận của tôi, đã quá lâu rồi. – Daniel

0

Bạn có thể theo dõi người dùng chạm vào màn hình và sử dụng presentPopoverFromRect: để chỉnh sửa lại cửa sổ bật lên.

+0

Đó là giá trị một thử, nhưng tôi tưởng tượng rằng nó có thể là một ít tốn kém để làm điều đó theo cách đó. Tôi chắc chắn rằng khi bạn loại bỏ nó và reshow nó, có rất nhiều phân bổ các nguồn lực đang xảy ra mà có thể được khá thuế cho hệ thống. –

+0

Điều này đúng, nhưng đó là nơi quản lý bộ nhớ tốt có hiệu lực. Đặc biệt là với iPad, bạn có một ít bộ nhớ hơn để chơi cùng. – WrightsCS

Các vấn đề liên quan