使用包含UItextview的自定义单元格滚动UITableView时出现问题

时间:2011-07-06 11:37:14

标签: iphone objective-c uitableview uitextview

我有一个包含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 ..

3 个答案:

答案 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;