2009-11-21 34 views
17

我已经使用Interface Builder(IB)在iPhone应用程序中创建了一个表视图。我的表格样式设置为分组,并在IB中显示。但是,无论何时构建和运行,它都会在模拟器中显示为普通样式。分组样式设置不能从IB生效,UITableView

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

视图的其余部分不是以编程方式创建的,所以我想避免为此视图执行此操作。必须有一些我错过了。

唯一的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

发布您的代码? – 2009-11-21 13:50:13

+0

没有真正的任何编程代码要发布是问题,在IB中将Style设置为“分组”,然后只是执行常规tableview I/F方法来设置节名称并根据需要修改表格单元以显示值。 – 2009-11-21 14:16:48

+0

你是否将这与UITabBarController结合使用? – JamesSugrue 2009-12-17 02:47:10

回答

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; 
} 
+0

此代码版本可行,但Joe的答案仅适用于IB版本。 – earnshavian 2012-02-21 15:52:05

+0

相同的代码,我已经实现,但不适用于iPhone 5,你有什么建议 – Raj 2013-08-05 10:39:31

0

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

+0

删除它并创建一个新的表格视图。然后附加数据源和委托给文件所有者。还将文件所有者的视图附加到表格中。发出reamins同样。 – 2009-11-21 16:18:51

13

我们有这个,它让我们困住了大约一个小时。最后,我们发现我们未能在导航控制器内设置视图控制器的NIB名称属性(在标签栏控制器内,在我们的主要XIB中!)。没有这个设置,我们对表格视图的XIB文件所做的所有更改都被完全忽略。然而,代码运行良好,否则很难指出我们的错误。

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

+0

我可以证实这个作品。将NIB名称设置为没有.xib扩展名的xib文件的名称。这应该被标记为仅适用于IB的解决方案的答案。 – earnshavian 2012-02-21 15:51:24

9

你的控制器的基类是什么?我有同样的问题,直到我将控制器从UITableViewController转换为标准UIViewController。看起来如果你使用的是UITableViewController,它有自己的内置UITableView,并忽略你在IB中指定的那个。

+0

在我的情况下工作!谢谢! – 2010-09-15 09:20:59

+0

帮助我呢,谢谢! – 2010-10-21 23:35:16

+0

OMG非常感谢你。 – 2011-02-08 11:35:51

2

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

例如,如果你的类名是 “设置”:

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

4

当初始化认为只要做到以下几点:

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

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

相关问题