2012-04-30 4 views
0

Я создаю пользовательский UIView, похожий на представление UIPopover, просто я подклассифицирую класс UIView и создаю материал элементов управления и событий внутри .., чтобы показать это представление. Я назначаю superView через My sub Класс DataSource как этотОтбросить пользовательский UIView, как в UIPopoverController

if ([dataSource respondsToSelector:@selector(containerView)]) 
     superView = [dataSource containerView]; 

и показать его у меня есть функция, делая это, как этот

- (void) showPopOverFromRect : (CGRect) rect 
{ 
    CGSize popSize = self.frame.size; 

    float yPoint; 

    if(ntPopOverDirection == NTPopOverArrowDirectionUP) 
     yPoint = rect.origin.y + 10; 
    else 
     yPoint = rect.origin.y - 10; 

    self.frame = CGRectMake(rect.origin.x - popSize.width, yPoint , popSize.width, popSize.height); 

    [superView addSubview:self]; 
} 

мой вопрос .. как я могу отклонить эту точку зрения (удалить его), если пользователь водопроводная AnyWhere на супервизоре, как UIPopOverController?

ответ

-1

Вы можете разместить UIButton под своим новым UIView, который будет чистым. Когда эта новая кнопка нажата, она отклоняет ваше представление и удаляет себя из супервизора.

Что-то вроде:

- (void) showPopOverFromRect : (CGRect) rect 
{ 
    CGSize popSize = self.frame.size; 

    float yPoint; 

    if(ntPopOverDirection == NTPopOverArrowDirectionUP) 
     yPoint = rect.origin.y + 10; 
    else 
     yPoint = rect.origin.y - 10; 

    self.frame = CGRectMake(rect.origin.x - popSize.width, yPoint , popSize.width, popSize.height); 

    UIButton *dismissButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    dismissButton.backgroundColor = [UIColor clearColor]; 
    dismissButton.frame = [[UIScreen mainScreen] bounds]; 
    [dismissButton addTarget:self.delegate action:@selector(dismissPopover) forControlEvents:UIControlEventTouchUpInside]; 
    [superview addSubview:dismissButton]; 

    [superView addSubview:self]; 
} 

Вы должны были бы создать представление, чтобы установить его SuperView в качестве делегата, который получает сообщение об отказе в поповер, хотя.

+0

ой, как я пропустил это! с некоторой модификацией он работает .. спасибо. –

+0

Что делать, если пользователь нажимает налево или вправо или над popover? Они не будут нажимать кнопку «clear». – bbarnhart

+0

@bbarnhart, но в UIPopController, если вы нажмете куда угодно, кроме popover и рядом со стрелкой, он будет уволен! так что случилось с этим? –

2

Я предлагаю вам создать свой пользовательский UIView, чтобы заполнить весь экран наблюдения или весь экран четким фоном или радиальным градиентом. Тогда внутри этого вы добавили бы еще один UIView, который будет выглядеть и ощущаться поппором.

Это устраняет проблему попыток захвата кранов и отправки уведомлений из других представлений. Это будет все самодостаточно.

Вы можете легко добавить распознаватель жестов в свой пользовательский вид, чтобы закрыть представление, когда пользователь коснется области прозрачности.

+0

+1 за ваше предложение .. спасибо. –

Смежные вопросы