我使用Interface Builder(IB)在iPhone应用程序中创建了一个表视图。我的表格样式设置为Grouped,并在IB中显示。但是,无论何时构建和运行,它都会在模拟器中显示为Plain样式。
我有另一个视图设置为Grouped并且没有遇到此问题。有没有人遇到过这个问题?
视图的其余部分不是以编程方式创建的,因此我想避免为此视图执行此操作。必须有一些我不知道的东西。
我正在做的唯一的tableView方法是单元格处理程序方法,我将文本框合并到选择字段中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
}
if (indexPath.section == 0) {
if (indexPath.row == 0) {
cell.textLabel.text = @"Title";
UITextField *listTitleTextField = [ [ UITextField alloc ] initWithFrame: CGRectMake(150, 10, 145, 38) ];
listTitleTextField.adjustsFontSizeToFitWidth = YES;
listTitleTextField.textColor = [UIColor blackColor];
listTitleTextField.font = [UIFont systemFontOfSize:17.0];
listTitleTextField.placeholder = @"Your Title";
listTitleTextField.backgroundColor = [UIColor whiteColor];
listTitleTextField.autocorrectionType = UITextAutocorrectionTypeNo; // no auto correction support
listTitleTextField.autocapitalizationType = UITextAutocapitalizationTypeNone; // no auto capitalization support
listTitleTextField.textAlignment = UITextAlignmentRight;
listTitleTextField.keyboardType = UIKeyboardTypeDefault; // use the default type input method (entire keyboard)
listTitleTextField.returnKeyType = UIReturnKeyDone;
listTitleTextField.tag = 0;
listTitleTextField.delegate = self;
listTitleTextField.clearButtonMode = UITextFieldViewModeUnlessEditing; // no clear 'x' button to the right
if (self.wishList.listTitle == nil || [self.wishList.listTitle length] == 0) {
listTitleTextField.text = @"";
}
else {
listTitleTextField.text = self.wishList.listTitle;
}
[listTitleTextField setEnabled: YES ];
[cell addSubview: listTitleTextField ];
[listTitleTextField release];
}
else if (indexPath.row == 1) {
cell.detailTextLabel.text = @"Pick an Icon";
cell.textLabel.text = @"List Icon";
}
}
else {
cell.textLabel.text = @"Add Wish";
}
return cell;
}
答案 0 :(得分:13)
我们有这个,它让我们困扰了大约一个小时。最后我们发现我们未能在导航控制器内设置视图控制器的NIB Name属性(在标签栏控制器内,在我们的主XIB中!)。如果没有该设置,我们对表视图的XIB文件所做的所有更改都将被完全忽略。然而,代码工作正常,而且我们很少指出我们的错误。
我打赌你的情况会发生类似情况。确保您的XIB(您设置表格样式的位置)实际上正在使用。
答案 1 :(得分:9)
你的控制器的基类是什么?我遇到了同样的问题,直到我将控制器从子类化UITableViewController
转换为标准UIViewController
。如果您使用UITableViewController
,它似乎有自己的内置UITableView
并忽略您在IB中指定的那个。
答案 2 :(得分:8)
仍不确定为什么“分组”样式设置未从Interface Builder生效。但是,您可以在此处创建视图之前手动设置它:
- (id)initWithStyle:(UITableViewStyle)style {
// Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
style = UITableViewStyleGrouped;
if (self = [super initWithStyle:style]) {
}
return self;
}
答案 3 :(得分:4)
初始化视图时,请执行以下操作:
CustomTableViewController *viewController = [[CustomTableViewController alloc] initWithStyle:UITableViewStyleGrouped];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];
而不仅仅是init。这解决了我。
答案 4 :(得分:2)
您需要在创建类时指定Nib名称,否则它将不会查找与您的类名称相同的默认nib。出于某种原因,Apple决定将自己的表视图作为默认值包含在内。
例如,如果您的班级名称是“设置”:
settingsController = [[Settings alloc] initWithNibName:@"Settings" bundle: nil];
答案 5 :(得分:0)
表视图是否响应事件并按照您的预期填充数据? - 听起来这些插座没有正确连接到我身上。我会仔细检查数据源并将tableview中的连接委托给控制器。可能值得从IB中删除tableview并重新添加它并重新连接它。在奇怪的情况下,我看到IB表现得有点挑剔。