Vì vậy, tôi có vấn đề tương tự và tôi chia sẻ nó vì tôi có lợi nhiều từ lưu lượng truy cập.
Giải pháp này cho phép bạn đặt neo của khoảng cách cửa sổ bật lên tùy chỉnh. Nó cũng cho phép bạn định cấu hình phân đoạn thành phương thức hay không (tôi không thể tìm cách ngăn chặn segue bằng cách làm mờ ngữ cảnh bên ngoài, vì vậy nếu ai đó biết cách làm điều đó, tôi sẽ thích nghe nó); điều này được thực hiện bằng cách thiết lập các khung nhìn passthrough cho bộ điều khiển popover. Tôi cũng đã thêm khả năng để chỉ định một khung nhìn tùy chỉnh, chứ không phải là khung nhìn của trình điều khiển xem nguồn (vì tôi cần khả năng này); phần này không quan trọng đối với giải pháp.
DynamicPopoverSegue.h
@interface DynamicPopoverSegue : UIStoryboardPopoverSegue
@property BOOL isModal;
@property UIView* sourceView;
@property CGRect anchor;
@end
DynamicPopoverSegue.m
@implementation DynamicPopoverSegue
- (void)perform
{
if (!self.popoverController.popoverVisible)
{
UIViewController* dst = (UIViewController*)self.destinationViewController;
UIViewController* src = (UIViewController*)self.sourceViewController;
UIView* inView = _sourceView ? _sourceView : src.view;
self.popoverController.contentViewController = dst;
if (!_isModal)
{
[self.popoverController setPassthroughViews:[[NSArray alloc] initWithObjects:inView, nil]];
}
[self.popoverController presentPopoverFromRect:_anchor
inView:inView
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
}
@end
Sau đó, bạn chỉ cần đặt segue của bạn để "Custom" trong kịch bản, và thiết lập các lớp segue để "DynamicPopoverSegue". Trong trường hợp của tôi, vì tôi muốn liên kết nó với các lớp động trong một khung nhìn, tôi không thể đặt neo, vì vậy tôi đã tạo phân đoạn bằng cách điều khiển bằng cách nhấp vào biểu tượng trình điều khiển chế độ xem trong thanh bên dưới trình điều khiển xem của tôi. sử dụng để trình bày popupover.
Để gọi segue popover:
[self performSegueWithIdentifier:@"MyPopoverSegue" sender:self];
Và để cấu hình segue popover:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"MyPopoverSegue"])
{
DynamicPopoverSegue* popoverSegue = (DynamicPopoverSegue*)segue;
// set the anchor to wherever you want it to be
popoverSegue.anchor = _destinationFrame;
}
}
Nguồn
2014-09-04 16:27:31
Cảm ơn. Chính xác những gì tôi cần. Tôi sẽ thử ý tưởng đầu tiên của bạn để xem liệu người gửi cuộc gọi performSegueWithIdentifier có trở thành anchor hay không. Nếu điều đó không hiệu quả, tôi sẽ đi với ý tưởng thứ hai. –