【问题标题】:Grouped style setting not taking effect from IB, UITableView分组样式设置未从 IB、UITableView 生效
【发布时间】:2009-11-21 13:45:14
【问题描述】:

我使用 Interface Builder (IB) 在 iPhone 应用程序中创建了一个表格视图。我的表格样式设置为分组,并在 IB 中以这种方式显示。但是,每当我构建和运行时,它都会在模拟器中显示为普通样式。

我将另一个视图设置为“分组”并且没有遇到此问题。有没有人遇到过这个问题?

视图的其余部分不是以编程方式创建的,所以我想避免为这个视图这样做。一定是我遗漏了什么。

我在其中做很多事情的唯一 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;

}

【问题讨论】:

  • 问题并不是要发布任何编程代码,在 IB 中将 Style 设置为“分组”,然后只需执行常规 tableview I/F 方法来设置部分名称并根据需要修改表格单元格以显示值。
  • 您是否将它与 UITabBarController 结合使用?
  • 不,只是一个导航控制器,显示的按钮在底部工具栏上

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


【解决方案1】:

我们有这个,它难倒了我们大约一个小时。最后我们发现我们未能在导航控制器内设置视图控制器的 NIB Name 属性(在标签栏控制器内,在我们的主 XIB 中!)。如果没有该设置,我们对表格视图的 XIB 文件所做的所有更改都将被完全忽略。然而代码在其他方面运行良好,几乎没有什么可以指出我们的错误。

我敢打赌,你的情况也类似。确保您的 XIB(您设置表格样式的位置)正在实际使用中。

【讨论】:

  • 我可以确认这是可行的。将 NIB 名称设置为不带 .xib 扩展名的 xib 文件的名称。这应该被标记为仅 IB 解决方案的答案。
【解决方案2】:

您的控制器的基类是什么?我遇到了同样的问题,直到我将控制器从子类UITableViewController 切换到标准UIViewController。如果您使用的是UITableViewController,它似乎有自己的内置UITableView 并忽略您在IB 中指定的那个。

【讨论】:

    【解决方案3】:

    仍然不确定为什么“分组”样式设置没有从 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;
    }
    

    【讨论】:

    • 此代码版本有效,但乔的上述回答适用于仅 IB 版本。
    • 同样的代码,我已经实现了,但在 iPhone 5 上不行,你有什么建议
    【解决方案4】:

    初始化视图时,只需执行以下操作:

    CustomTableViewController *viewController = [[CustomTableViewController alloc] initWithStyle:UITableViewStyleGrouped];
    [self.navigationController pushViewController:viewController animated:YES];
    [viewController release];
    

    而不仅仅是初始化。这为我解决了。

    【讨论】:

      【解决方案5】:

      您需要在创建类时指定 Nib 名称,否则它将不会查找与您的类命名相同的默认 nib。出于某种原因,Apple 决定将其自己​​的表格视图作为默认设置。

      例如,如果您的班级名称是“设置”:

      settingsController = [[Settings alloc] initWithNibName:@"Settings" bundle: nil];

      【讨论】:

        【解决方案6】:

        表格视图是否响应事件并按照您的预期填充数据? - 听起来插座没有正确连接到我。我会仔细检查数据源并委托从 tableview 到控制器的连接。可能值得从 IB 中删除 tableview 并重新添加它并重新连接它。我看到 IB 在奇怪的情况下表现得有些挑剔。

        【讨论】:

        • 删除它并创建一个新的表视图。然后附加数据源并委托给文件所有者。还将文件所有者中的视图附加到表中。问题仍然相同。
        猜你喜欢
        • 1970-01-01
        • 2010-11-03
        • 1970-01-01
        • 2011-04-23
        • 1970-01-01
        • 2012-01-26
        • 2011-02-02
        • 2023-03-04
        相关资源
        最近更新 更多