web-dev-qa-db-ja.com

他のすべてのビューの上にUIViewを配置します

コードで作成されたUIViewを他のすべてのビューの上に配置する方法を誰かが助けてくれますか?ここで、tableViewは親ビューであり、subSelectionViewはカスタムの兄弟ビューです。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はtableView内にあります。さて、そのボタンをクリックすると、実際にはクリックできないという問題があります。コードが存在していても、tableViewに直接フォーカスします。誰かが私を助けてくれますか?...

enter image description here

15
Aldee

私があなたの質問を正しく読んだ場合、あなたの問題は、テーブルビューの上にある新しいビューのボタンを実際にタップできないことですか?

そして、それをタップすると、以下のUITableViewが応答しますか?

これは、UIButtonがタップされたことを認識せず、イベントがその下の次のサブビューに移動して処理されることを意味します。

現在、そのような動作には多くの考えられる原因があります-ユーザーの操作が無効になっている可能性がありますIView、それはEnabledプロパティをNOに設定するか、またはIViewの結合を超えている可能性があります(iOSは、タップが境界の長方形の外にある場合、レシーバーを逃したと自動的に想定します)。

また、アルファが0.0に設定されている場合、タップは無視されます。

上記のすべてをチェックする必要があります。

7
Peter Sarnowski

UIViewインスタンスのメソッドbringSubViewToFrontがあります。その方法を使用できます。

例えば.

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

編集

あなたの場合、それは次のようになるはずです、

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

またはうまくいかない場合は試してください

[viewController.view bringSubviewToFront:subSelectionView];
6
Moonkid

Swiftでこれを行うことができます:

self.view.bringSubviewToFront(theViewToMoveToFront)
6
pableiros

このサブビューをビュースタックの上位に配置できます。これはInterface Builderで簡単に行うことができます。

enter image description here

ここでは、Label - filesTable View - all filesの上に配置されています。それはあなたが欲しいものではないですか?

5

UIViewのsubViewsプロパティから取得するNSArraysubviewsとともにUIView- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index関数を使用します...

4
Jhaliya