Подтвердить что ты не робот

Поместите UIView поверх всех других видов

Может кто-нибудь помочь мне в том, как сделать UIView, созданный в коде, поверх всех других представлений? где tableView - это родительский вид, а subSelectionView - это мой пользовательский вид siblings, я хочу сделать его поверх tableView. У меня есть этот код ниже:

Это полный исходный код для моего didSelectRowAtIndexPath:, откуда я программно добавляю экземпляр UIView.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{ 
    // Execute upon selection
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    [[tableView viewWithTag:199]removeFromSuperview];

    // Get the cell size
    CGSize cellSize = [tableView cellForRowAtIndexPath:indexPath].frame.size;

    // Contact Details Container
    UIView *subSelectionView;
    if(indexPath.row < [contacts count] - 6)
        subSelectionView = [[UIView alloc]initWithFrame:CGRectMake(10, 0, (int)cellSize.width - 20, (int)cellSize.height + 130)];

    subSelectionView.backgroundColor = [UIColor grayColor];
    subSelectionView.layer.borderColor = [UIColor grayColor].CGColor;
    subSelectionView.layer.borderWidth = 1;
    subSelectionView.alpha = 0.9;
    subSelectionView.tag = 199;
    subSelectionView.layer.cornerRadius = 5.0;


    // Contact Name Container
    UIView *contactNameSubSelectionView;
    if(indexPath.row < [contacts count] - 6)
        contactNameSubSelectionView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, (int)cellSize.width - 20, (int)cellSize.height)];

    contactNameSubSelectionView.backgroundColor = [UIColor grayColor];
    contactNameSubSelectionView.alpha = 0.5;

    [subSelectionView addSubview:contactNameSubSelectionView];


    // Contact Name Label
    Contacts *contact = [self.contacts objectAtIndex:indexPath.row];
    NSString *contactName = [NSString stringWithFormat:@"  %@ %@ ", contact.fname, contact.lname];

    UILabel *contactNameLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, (int)cellSize.width, (int)cellSize.height)];
    contactNameLabel.layer.cornerRadius = 4.0;

    [contactNameLabel setText: contactName];
    [contactNameLabel setTextColor:[UIColor blackColor]];
    [contactNameLabel setFont:[UIFont boldSystemFontOfSize:[UIFont systemFontSize]]];
    [contactNameSubSelectionView addSubview:(UIView *)contactNameLabel];


    // Buttons
    UIButton *buttonMobile = [[UIButton alloc]initWithFrame:CGRectMake(10, cellSize.height + 10, 30, 30)];
    buttonMobile.layer.borderWidth = 1;
    [buttonMobile setTitle:@"..." forState:UIControlStateNormal];
    [buttonMobile addTarget:self action:@selector(btPressed:) forControlEvents:UIControlStateNormal];

    [subSelectionView addSubview:(UIView *) buttonMobile];



    [[tableView cellForRowAtIndexPath:indexPath]insertSubview:subSelectionView aboveSubview:self.view];   
    [self.parentViewController.view bringSubviewToFront:subSelectionView];


    [tableView reloadData];

}

но не работает.

На рисунке ниже показано мое subSelectionView, кнопка находится внутри него, а subSelectionView находится в таблицеView. Теперь, когда я нажал эту кнопку, проблема в том, что я не могу на самом деле щелкнуть ее. Он фокусируется непосредственно на tableView даже при наличии моих кодов. Может ли кто-нибудь помочь мне, пожалуйста?....

enter image description here

4b9b3361

Ответ 1

Если я правильно прочитал ваш вопрос, ваша проблема в том, что вы не можете нажимать кнопку в своем новом представлении, что поверх таблицы?

И когда вы нажимаете его, UITableView ниже отвечает?

Это означает, что UIButton не распознает, что он прослушивается, а событие переходит к следующему подвью под ним, которое нужно обработать.

Теперь существует много возможных причин такого поведения: у вас может быть отключено взаимодействие пользователя или UIView, это может быть свойство Enabled, установленное как NO, или оно может быть за пределами связей UIView (iOS автоматически предполагает, что если кран находится за пределами прямоугольника границ, он пропустил приемник).

Кроме того, краны игнорируются, если для вашей альфы установлено значение 0.0.

Вы должны проверить все вышеперечисленное.

Ответ 2

Существует метод bringSubViewToFront экземпляра UIView. Вы можете использовать этот метод.

например.

UIVIew *yourSubView;
[yourMainView addSubView:yourSubView];
[yourMainView bringSubviewToFront:yourSubView];

ИЗМЕНИТЬ

в вашем случае это должно быть,

[[tableView cellForRowAtIndexPath:indexPath] insertSubview:subSelectionView aboveSubview:self.view];
[[tableView cellForRowAtIndexPath:indexPath] bringSubviewToFront:subSelectionView];

Ответ 3

Вы можете поместить этот подъярус выше в стек представления. Это можно легко сделать в Interface Builder.

enter image description here

Здесь Label - files помещается поверх Table View - all files. Разве это не то, что вы хотите?

Ответ 4

[tableView bringSubviewToFront:subSelectionView];

или если вы не попытаетесь выполнить работу

[viewController.view bringSubviewToFront:subSelectionView];

Ответ 5

Используйте - (void)insertSubview:(UIView *)view atIndex:(NSInteger)index функцию UIView вместе с NSArray subviews, которую вы получаете из свойства UIView subViews...

Ответ 6

В Swift вы можете сделать это:

self.view.bringSubview(toFront: theViewToMoveToFront)