Jas*_*hao 9 iphone objective-c ios
我有UITableViewController.在这个控制器中,我添加了一个UITextField的子视图UIView.当UITextField获得第一响应者时
设置表的第一个响应者视图但我们不知道它的类型(单元格/页眉/页脚)
代码如下:
@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];
}
Run Code Online (Sandbox Code Playgroud)
如何避免这种警告?
Jef*_*mas 18
警告告诉您已将opaqueView直接添加到表视图中.表视图期望将交互式子视图添加到tableHeaderView,tableFooterView或单元格内.
违规行是[self.view addSubview:opaqueView];因为self.view是表格视图.
你可以解决这个问题之一.如果您使用的是导航控制器,则可以在其中推送一个带有opaqueView的新控制器.您可以在表视图中弹出一个模态视图,其中包含opaqueView.您可以更改结构,使self.view不是表视图(这是很多工作).
UPDATE
这个答案有点忙,所以我会发布更新.我发现Apple使用的是与我建议的解决方案不同的解决方案.
[self.view addSubview:opaqueView];您可以[self.view.window addSubview:opaqueView];将子视图直接添加到表视图的窗口,而不是尝试将子视图添加到表视图.您需要记住,您正在使用视图,因此边界和框架可能不同self.view.
| 归档时间: |
|
| 查看次数: |
9408 次 |
| 最近记录: |