setting the first responder view of the table but we don't know its type (cell/header/footer)

ios, iphone, objective-c

Solution

The warning is telling you that you added opaqueView to the table view directly. Table views expect interactive subviews to be added to tableHeaderView, tableFooterView, or within a cell.

The offending line is `[self.view addSubview:opaqueView];` because self.view is the table view.

You can fix this is one of several ways. If you are using a navigation controller, you can push a new controller with opaqueView in it. You can pop up a modal view over the table view with opaqueView in it. You can change the structure such that self.view is not a table view (which is a lot of work).

UPDATE

This answer is kind of busy, so I will post an update. I discovered that Apple uses a different solution then the ones I suggested.

Instead of `[self.view addSubview:opaqueView];` which tries to add the subview to a table view, you can do `[self.view.window addSubview:opaqueView];` which adds the subview directly to the table view's window. You need to keep in mind that you are using a view so the bounds and frame may be different than `self.view`.

Problem

I have UITableViewController. In this controller I add a subview UIView with UITextField in it. When the UITextField get first responder got setting the first responder view of the table but we don't know its type (cell/header/footer) Code as below: ``` @interface UserAlbumListViewController (){ NSString *newAlbumName; UITextField *albumNameField; } @end -(void)addAlbumButtonPressed:(id)sender{ self.tableView.scrollEnabled = NO; CGRect frame = self.view.frame; UIView *opaqueView = [[UIView alloc] initWithFrame:frame]; opaqueView.tag = 1001; opaqueView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5]; UIView *controllerView = [[UIView alloc] init]; controllerView.tag = 1002; controllerView.backgroundColor = [UIColor whiteColor]; controllerView.frame = CGRectMake(10.0f, 60.0f, frame.size.width - 20.0f, 90.0f); [opaqueView addSubview:controllerView]; albumNameField = [[UITextField alloc] init]; albumNameField.borderStyle = UITextBorderStyleRoundedRect; albumNameField.placeholder = NSLocalizedString(@"Album Name",nil); albumNameField.keyboardType = UIKeyboardTypeDefault; albumNameField.returnKeyType = UIReturnKeyDefault; albumNameField.autocorrectionType = UITextAutocorrectionTypeNo; albumNameField.autocapitalizationType = UITextAutocapitalizationTypeNone; albumNameField.clearButtonMode = UITextFieldViewModeWhileEditing; albumNameField.clearsOnBeginEditing = NO; albumNameField.text = @""; albumNameField.frame = CGRectMake(10.0f , 10.0f, controllerView.frame.size.width - 20.0f, 30.0f); [albumNameField becomeFirstResponder]; [controllerView addSubview:albumNameField]; UIButton *_cancelButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; _cancelButton.backgroundColor = [UIColor clearColor]; [_cancelButton setTitle:NSLocalizedString(@"Cancel",nil) forState:UIControlStateNormal]; _cancelButton.frame = CGRectMake( controllerView.frame.size.width - 90.0f, albumNameField.frame.origin.y + albumNameField.frame.size.height + 10.0f, 80.0f, 30.0f); [_cancelButton addTarget:self action:@selector(opaqueViewCancelButtonClicked:) forControlEvents:UIControlEventTouchDown]; [controllerView addSubview:_cancelButton]; UIButton *_OKButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; _OKButton.backgroundColor = [UIColor clearColor]; [_OKButton setTitle:NSLocalizedString(@"OK",nil) forState:UIControlStateNormal]; _OKButton.frame = CGRectMake( _cancelButton.frame.origin.x - 90.f, _cancelButton.frame.origin.y, 80.0f, 30.0f); [_OKButton addTarget:self action:@selector(opaqueViewOKButtonClicked:) forControlEvents:UIControlEventTouchDown]; [controllerView addSubview:_OKButton]; [self.view addSubview:opaqueView]; [controllerView release]; [opaqueView release]; } ``` How to avoid this warning?

Original source