scrollToRowAtIndexPath不调用cellForRowAtIndexPath而不是滚动UITable视图

时间:2012-09-21 08:17:50

标签: iphone objective-c uitableview ios5

实际上我需要为我项目中的所有交易制作pdf文件。所以我创建了包含.iib的PDFViewController类,其中包含uiView,uitableView等。

我没有将此课程告诉用户,我正在拍摄此类视图的屏幕截图,以便为所有交易制作pdf。

我的问题是我可以拍摄屏幕截图和表格,但我在表格中有很多行,所以我需要滚动它才能拍摄仅用于tableview的屏幕截图,但它不能滚动。

请参阅以下代码,我们将非常感谢您的帮助。感谢

@implementation PDFViewController

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier=@"PDFCustomCell";
    PDFViewCustomCell *cell=(PDFViewCustomCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell==nil) 
    {
        NSArray *nib=[[NSBundle mainBundle]loadNibNamed:@"PDFViewCustomCell" owner:self options:nil];

        cell=[nib objectAtIndex:0];
        nib=nil;
    }

    //@autoreleasepool {

    PDFPrint *pdfObj=[self.arrProducts objectAtIndex:indexPath.row];

    cell.unitPrice.text=[currencyFormator stringFromNumber:[NSNumber numberWithDouble:[pdfObj.unitPrice doubleValue]]];
    UIImage* img =  [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@/downloads/%@/files/%@.jpg",del.LocalPath,del.CompFolder,del.RepId,pdfObj.code]];
    if(img!=nil)
        [cell.imageView setImage:img];
    else
        [cell.imageView setImage:[UIImage imageNamed:@"no_privew95x77.jpg"]];
        pdfObj=nil;
            return cell;
    //}
}
  • (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSLog(@“数组计数=%i”,[self.arrProducts计数]); return [self.arrProducts count]; }

    • (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 返回1; }
    • (无效)viewDidLoad中 { [super viewDidLoad];

      NSString * strlogopath = [NSString stringWithFormat:@“%@ /%@ /%@”,del.LocalPath,del.CompFolder,del.CompInfo.ImageName]; [self.imgLogo setImage:[UIImage imageWithContentsOfFile:strlogopath]]; strlogopath = nil; [self filldata];

    } - (无效)filldata {    //这里我正在填充arrProduct NSMutableArray中许多表的数据我已经删除了StackOverflow的行数以获得代码复杂性。我准确地在arrProduct中获取数据。

            [self.arrProducts addObject:pdfData];
    
    
        [SQLHelper finalizeStatement:stmt];
    }
    @catch (NSException *exception)
    {
        NSLog(@"%@",exception.description);
    }
    @finally 
    {
        [SQLHelper disconnectDB:database];
    }
    

    }

    @end

    // CurrentTransaction.m //在currentTransaction.m中我没有添加self.pdfViewController视图bcoz我不需要显示它。我必须拍摄屏幕才需要制作pdf文件 问题是我无法滚动表格进行下一行屏幕截图。

    • (UIView *)loadTemplate:(PrintChoice_t)类型 { if(type == Small_Photo) {     self.pdfViewController = [[PDFViewController alloc] initWithNibName:@“PDFViewController”bundle:[NSBundle mainBundle] ReferenceController:&自]; } return self.pdfViewController.view; }

    // someThere在这个类中我正在调用

    [self.pdfViewController.tblProd scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:14 inSection:0] atScrollPosition:UITableViewScrollPositionNone animated:NO];

    //但是scrollToRowAtIndexPath没有在PDFViewController中调用CellForRowAtIndexPath。我可以看到调试信息只有14行可见0位置14行。

1 个答案:

答案 0 :(得分:2)

您正在访问另一个视图控制器中的表(来自CurrentTransaction视图控制器的pdfViewController),但是您作为索引路径传递CurrentTransaction视图indexPath,如果您的CurrentTransaction视图没有tableView或者TableView没有14行,或者它将具有无效的NSIndexPath。

我建议在pdfViewController中添加一个自定义公共方法,它将滚动到该行。像这样:

- (void)scrollToRow:(int)row atSection:(int)section {
     [self.tblProd scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:14 inSection:0] atScrollPosition:UITableViewScrollPositionNone animated:NO]
}

然后在CurrentTransaction.m中替换

[self.pdfViewController.tblProd scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:14 inSection:0] atScrollPosition:UITableViewScrollPositionNone animated:NO];

使用:

[self.pdfViewController scrollToRow:14 atSection:0];

应该可以正常工作!