我有一个包含UITextView,UILabel和UIButton的自定义单元格的表视图。
问题是,
第一次加载表时,显示2个单元格并且没有问题。但是当滚动表格时,任何单元格都会滚出屏幕,app会突然终止,而不会向控制台显示任何异常错误。
这是我的代码,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"In tableView:Cell");
static NSString *CustomCellIdentifier = @"CustomCellIdentifier ";
CourtsFavoriteCustomCell* cell = (CourtsFavoriteCustomCell *)[tableView dequeueReusableCellWithIdentifier: CustomCellIdentifier];
if( cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CourtsFavoriteCustomCell"
owner:self options:nil];
for (id oneObject in nib)
if ([oneObject isKindOfClass:[CourtsFavoriteCustomCell class]])
cell = (CourtsFavoriteCustomCell *)oneObject;
//*********** Creating button inside each TableView cell..
UIButton *mapButton = [UIButton buttonWithType:UIButtonTypeRoundedRect] ;
[mapButton setFrame:CGRectMake(120.0f, 157.0f, 72.0f, 32.0f)] ;
//btnDetail.backgroundColor = [UIColor grayColor];
[mapButton setTitle:@"Map" forState:UIControlStateNormal];
[mapButton setTitleColor: [UIColor redColor] forState: UIControlStateNormal];
//[mapButton.titleLabel setFont:[UIFont fontWithName:@"Verdana-Bold" size:12]];
[mapButton setBackgroundColor:[UIColor clearColor]];
[mapButton sizeThatFits:mapButton.frame.size];
[cell addSubview:mapButton];
[mapButton addTarget:self
action:@selector(cellMapButtontapped:)
forControlEvents:UIControlEventTouchUpInside];
forState:UIControlStateNormal];
}
NSLog(@"App get terminated after showing this log message to console when scrolling tableview");
cell.name.text = favCourtName; // name is a UIText view and if comment this line of code, every thing works fine
cell.address.text = favCourtAddress;
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
return cell;
}
我在自定义单元格中使用UITextView(代码中的Cell.name)。当我尝试将UITextView代码注释掉时,一切正常。
请帮帮我:) thanx ..
答案 0 :(得分:2)
来自Apple Docs;
重要说明:您不应在UIScrollView对象中嵌入UIWebView或UITableView对象。如果这样做,可能会导致意外行为,因为两个对象的触摸事件可能会混淆和错误处理。
UITableView和UITextView都是UIScrollView的子类。
一旦解决了内存问题,您仍会遇到意外行为。你应该重新考虑这个设计,而不是支持它。
您没有提供足够的信息来进一步提供帮助。您在控制台上收到了什么错误消息?
与您的问题无关:使用大写的第一个字符(即cell.Name
)命名属性是非典型的。单元格上的Name属性应为小写(即name
)。
答案 1 :(得分:1)
@All,Thanx为你们所有人的答案.. :) 我解决了问题。它不是UITextView。
为什么我在这里写作是因为,如果有其他人来这里遇到同样的问题,那可能有所帮助。
问题实际上非常简单,但花了我2天才发现,因为它没有显示任何异常。
我做的是,在我的ViewDidLoad方法中将'retain'添加到我的'favCourtName'中。像这样,
NSString * favCourtName = [[[NSString alloc] initWithFormat:@"myCourt"] retain];
“保留”这个词真的很神奇。谢谢
答案 2 :(得分:0)
favCourtName在某处发布,是否只分配一次?或者在每个单元格上进行初始化?
cell.Name.text = favCourtName;
关于性能的第二件事,如果你使用下面的代码,它会在从Nib文件加载时滚动速度变慢,而你可以使用initWithStyle:
工作。
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CourtsFavoriteCustomCell"
owner:self options:nil];
for (id oneObject in nib)
if ([oneObject isKindOfClass:[CourtsFavoriteCustomCell class]])
cell = (CourtsFavoriteCustomCell *)oneObject;