コードで作成された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に直接フォーカスします。誰かが私を助けてくれますか?...
私があなたの質問を正しく読んだ場合、あなたの問題は、テーブルビューの上にある新しいビューのボタンを実際にタップできないことですか?
そして、それをタップすると、以下のUITableViewが応答しますか?
これは、UIButtonがタップされたことを認識せず、イベントがその下の次のサブビューに移動して処理されることを意味します。
現在、そのような動作には多くの考えられる原因があります-ユーザーの操作が無効になっている可能性がありますIView、それはEnabledプロパティをNOに設定するか、またはIViewの結合を超えている可能性があります(iOSは、タップが境界の長方形の外にある場合、レシーバーを逃したと自動的に想定します)。
また、アルファが0.0に設定されている場合、タップは無視されます。
上記のすべてをチェックする必要があります。
UIViewインスタンスのメソッドbringSubViewToFrontがあります。その方法を使用できます。
例えば.
UIVIew *yourSubView;
[yourMainView addSubView:yourSubView];
[yourMainView bringSubviewToFront:yourSubView];
編集
あなたの場合、それは次のようになるはずです、
[[tableView cellForRowAtIndexPath:indexPath] insertSubview:subSelectionView aboveSubview:self.view];
[[tableView cellForRowAtIndexPath:indexPath] bringSubviewToFront:subSelectionView];
[tableView bringSubviewToFront:subSelectionView];
またはうまくいかない場合は試してください
[viewController.view bringSubviewToFront:subSelectionView];
Swiftでこれを行うことができます:
self.view.bringSubviewToFront(theViewToMoveToFront)
このサブビューをビュースタックの上位に配置できます。これはInterface Builderで簡単に行うことができます。
ここでは、Label - files
がTable View - all files
の上に配置されています。それはあなたが欲しいものではないですか?
UIViewのsubViewsプロパティから取得するNSArraysubviewsとともにUIView
の- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index
関数を使用します...