我想在 tableView 中有 textFields。因此,我将它们手动插入到情节提要的 tableView 中并修改了它们的各个属性。但是,当我运行程序时,我看不到文本字段。我用一个开关重复了同样的过程。但它仍然没有运行。因此,我认为尽管对象存在于情节提要中,但并未显示这些对象。
Q1。知道为什么会这样吗?
为了克服这个问题,我以编程方式插入了这些对象。对于 UISwitch,我cellForRowAtindexPath
在initWithStyle:style reuseIdentifier:reuseIdentifier
.
UISwitch *newSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(25, 55, 77, 27)];
[newSwitch addTarget: self action: @selector(pictureSwitchAction:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:newSwitch];
这工作正常。pictureSwitchAction
方法按预期调用。
但是,当我尝试用 UITextField 做类似的事情时,应用程序崩溃了。(仅供参考......field0
被声明为property
。)这是我的代码:
field0 = [[UITextField alloc] initWithFrame:CGRectMake(0, 50, 320, 44)]; // (1)
cell = (UITableViewCell *)[field0 superview]; // (2)
[self.view addSubview:field0]; // (3)
(1) 和 (2)(注释 (3))使应用程序崩溃。错误:*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
我的理解是,必须先返回单元格,然后才能为其分配一些价值。但是(1)和(3)(注释(2))没有结果。我不知道为什么这适用于开关而不是 UITextField。
对 Q1 的任何回应以及如何以编程方式插入 textField?
谢谢!
编辑 1
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone; // VERY IMPORTANT
if(indexPath.section == 2)
{
if (indexPath.row == 0)
{
field0 = [[UITextField alloc] initWithFrame:CGRectMake(0, 50, 320, 44)];
cell = (UITableViewCell *)[field0 superview];
// [self.view addSubview:field0];
}
if (indexPath.row == 1)
{
field1 = [[UITextField alloc] initWithFrame:CGRectMake(0, 50, 300, 43)];
cell = (UITableViewCell *)[field1 superview];
// [self.view addSubview:field1];
}
if (indexPath.row == 2)
{
field2 = [[UITextField alloc] initWithFrame:CGRectMake(0, 50, 300, 43)];
cell = (UITableViewCell *)[field2 superview];
// [self.view addSubview:field2];
}
}
return cell;
}