分组样式设置不受IB,UITableView的影响

时间:2009-11-21 13:45:15

标签: iphone objective-c uitableview iphone-sdk-3.0

我使用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;

}

6 个答案:

答案 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表现得有点挑剔。