在我的应用中,行从另一个视图添加到我的TableView
。当用户添加行时,用户将被带回TableView
。问题是之前输入的文本不再显示。
我可以使用NSMutableDictionary
加载它,但用户无法看到它。关于我应该做什么的任何想法?我应该添加什么代码以及我应该添加它的位置?非常感谢!
以下是tableview
方法的代码。我认为修复将在这里进行。
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
static NSString *CellIdentifier = @"Cell";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.wtf = [[UITextField alloc]init];
NSUInteger count =0;
for (NSMutableDictionary *search in dataForAllRows){ //this just helps me pull the right data out of an array of NSMutableDictionary's
if ([search valueForKey:@"indexSection"] == [NSNumber numberWithInteger:(indexPath.section -1)]) {
if ([search valueForKey:@"indexRow"] == [NSNumber numberWithInteger:indexPath.row]) {
NSMutableDictionary *match = [dataForAllRows objectAtIndex:count];
[cell.wtf setText:[match objectForKey:@"wtf"]];
NSLog(@"%@",cell.wtf.text); // this outputs the correct value in the command line
}
}
count++;
}
}
}
以下是我的CustomCell.m
的代码#import "CustomCell.h"
@implementation CustomCell
@synthesize wtf, cellPath;
- (void)awakeFromNib {
// Initialization code
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
-(void)layoutSubviews{
wtf = [[UITextField alloc] initWithFrame:CGRectMake(7, 3, 65, self.contentView.bounds.size.height-6)];
self.wtf.delegate = self;
[wtf setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter];
[wtf setAutocorrectionType:UITextAutocorrectionTypeNo];
[wtf setAutocapitalizationType:UITextAutocapitalizationTypeNone];
[wtf setBorderStyle:UITextBorderStyleRoundedRect];
wtf.textAlignment = NSTextAlignmentCenter;
wtf.keyboardType = UIKeyboardTypeNumberPad; //
[wtf setAutocapitalizationType:UITextAutocapitalizationTypeWords];
[wtf setPlaceholder:@"enter"];
[self.contentView addSubview:wtf];
}
答案 0 :(得分:1)
考虑使用标识符@" Cell"定义单元格。在IB中作为表的原型行。然后,使用dequeueReusableCellWithIdentifier:forIndexPath:
检索cellForRowAtIndexPath中的单元格。您可以更容易地理解单元格的外观,并且可以避免在代码中定义子视图时常见的一些错误。
说到常见错误,您的代码似乎呈现出一对:它不会构建文本字段,也不会将其添加为单元格的子视图。两者都解释没有看到文本字段。
@ williamb的建议是正确和必要的:只有在他们不在的情况下构建单元格的子视图,但是单元格的构建是不完整的......
if (cell == nil) {
cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
UITextField *wtf = [[UITextField alloc]initWithFrame:CGRectMake(10,10,200,42];
[wtf setDelegate:self];
[cell addSubview:wtf];
cell.wtf = wtf;
}
正如我在评论中提到的,分段表应该由2D数组支持。外部数组是一个部分数组。每个section数组都是一个字典数组,等于你每次通过这个方法搜索的字典数组,但预先安排好所有在cellForRowAtIndexPath中完成的操作都会索引到一个数组中:
NSDictionary *d = self.myCorrectlyStructuredModel[indexPath.section][indexPath.row];
cell.wtf.text = d[@"wtf"];
从你拥有的东西中建立这个并不是一个很大的挑战。在解决文本字段问题后,请考虑正确执行此操作。我(或其他人)可以给你一些建议 - 如果你需要的话 - 关于如何建立这种结构。
答案 1 :(得分:0)
如果该单元格不存在,并且将文本字段实例覆盖为没有提及@danh的框架,则看起来您只设置文本字段的文本值。我相信您要做的是将文本字段添加到您的单元格contentview
后重复使用,并更改该文本字段为每个索引路径显示的内容。
尝试重构您的单元格代码更像:
@implementation ExerciseCell
#pragma mark - Init
- (id)initWithStyle:(UITableViewCellStyle)style
reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style
reuseIdentifier:reuseIdentifier];
if (self)
{
wtf = [[UITextField alloc] initWithFrame:CGRectMake(7, 3, 65, 44)];
wtf.delegate = self;
[wtf setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter];
[wtf setAutocorrectionType:UITextAutocorrectionTypeNo];
[wtf setAutocapitalizationType:UITextAutocapitalizationTypeNone];
[wtf setBorderStyle:UITextBorderStyleRoundedRect];
wtf.textAlignment = NSTextAlignmentCenter;
wtf.keyboardType = UIKeyboardTypeNumberPad;
[wtf setAutocapitalizationType:UITextAutocapitalizationTypeWords];
[wtf setPlaceholder:@"enter"];
[self.contentView addSubview:wtf];
}
return self;
}
和你的tableview数据源类更像是
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
static NSString *CellIdentifier = @"Cell";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
[cell.wtf setDelegate:self];
}
NSUInteger count = 0;
for (NSMutableDictionary *search in dataForAllRows){ //this just helps me pull the right data out of an array of NSMutableDictionary's
if ([search valueForKey:@"indexSection"] == [NSNumber numberWithInteger:(indexPath.section -1)]) {
if ([search valueForKey:@"indexRow"] == [NSNumber numberWithInteger:indexPath.row]) {
NSMutableDictionary *match = [dataForAllRows objectAtIndex:count];
[cell.wtf setText:[match objectForKey:@"wtf"]];
NSLog(@"%@",cell.wtf.text); // this outputs the correct value in the command line
}
}
count++;
}
}
}
你的意思是两次分配textField的代表吗?一旦进入单元格,一次进入tableview的数据源?
答案 2 :(得分:0)
为了将文字加载到UITextField
中的CustomCell
,我添加了以下方法
-(void)viewMyCellData{
//here I can set text to my textfield
wtf.text = @"Desired Text"; //this will read in every wtf textfield in the table
//getting the right text from an array will be asked in another question that I will post
//in a comment to this answer
}
接下来我们使用[self viewMyCellData]
来调用它
在我们结束时
-(void)layoutSubviews
CustomCell.m
方法