2011-07-12 37 views
6

Tôi đang hiển thị cửa sổ bật lên có bộ điều khiển chế độ xem có chứa bộ thuộc tính modalInView. Tôi cần người dùng nhập câu trả lời tại đây trước khi tiếp tục.Làm cách nào để vô hiệu hóa thanh công cụ chính khi hiển thị cửa sổ bật lên bằng modalInPopover?

Trong khi điều này vô hiệu hóa hầu hết các điều khiển giao diện người dùng của tôi, nó sẽ vô hiệu hóa các nút trên thanh công cụ trên ứng dụng chính. Tôi không muốn người dùng tương tác với ứng dụng trước khi chọn một mục trong cửa sổ bật lên và đóng nó.

Tôi có thiếu thông tin gì ở đây không - tức là điều đó sẽ vô hiệu hóa thanh công cụ theo mặc định? Tại sao nó vẫn hoạt động? Có một số nguyên tắc giao diện người dùng yêu cầu không?

Tôi có nên chỉ đặt thanh công cụ để không cho phép tương tác của người dùng hoặc lộn xộn không?

Trả lời

1

Những gì tôi thấy làm việc tốt nhất là những gì bạn đề cập đến như khả năng trong câu hỏi của bạn:

-(void)showMyPopover 
{ 
    .... 
    self.myToolBar.userInteractionEnabled=NO; 
    [self.myPopover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES] 
} 

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController 
{ 
    self.myToolBar.userInteractionEnabled=YES; 
    ... 
} 
6

Nó có vẻ như iOS thêm thanh như là một "cái nhìn passthrough" cho popover, khi bạn trình bày nó từ UIBarButtonItem.

Chỉ cần thiết lập để tài sản của UIPopoverController nil passthroughViews sau khi trình bày nó, như thế này:

[self.myPopover presentPopoverFromBarButtonItem:some_item permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
dispatch_async(dispatch_get_main_queue(), ^{ self.myPopover.passthroughViews = nil; }); 
+0

Cảm ơn bạn! Nó cứu tôi :) – mohamede1945

+0

Lifesaver, chắc chắn. Tôi thậm chí không thể hình dung được lý do tại sao Apple sẽ làm điều này theo mặc định, vì nó là một vụ tai nạn được bảo đảm bất cứ khi nào bạn chạm vào mục nút thanh một lần nữa. – MusiGenesis

+0

Trên iOS8, bạn cần đặt passthroughViews trong một runloop khác để làm cho nó hoạt động. Thông tin thêm [tại đây] (http://blog.karmeye.com/2014/11/20/ios8-popovers-and-passthroughviews/). – Karmeye

2

Sử dụng -[UIPopoverController presentPopoverFromRect:inView:permittedArrowDirections:animated] thay vào đó, mà không cho phép tương tác thanh công cụ theo mặc định. Ví dụ: nếu trình bày từ một số UIBarButtonItem có thuộc tính customView được đặt:

[barButtonItem presentPopoverFromRect:barButtonItem.customView.bounds inView:barButtonItem.customView permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];` 
Các vấn đề liên quan