-1

我是 Obj-c 编程的菜鸟。我正在制作一个由 ViewController 组成的 iPad 应用程序,它向我显示 2 个文本框,一个位于上侧的按钮,只是为了求和。

在同一个 Viewcontroller 中,我有一个 TableView 和一个 Button。这个 Tableview 最初向我展示了一个元素,但我想刷新这个列表,只需单击按钮。

在按钮上链接的刷新列表(触摸事件)的功能称为“listaPDF”。

视图控制器.h

#import <UIKit/UIKit.h>

@interface VPViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
    IBOutlet UITextField *txtPrimoAddendo ;
    IBOutlet UITextField *txtSecondoAddendo ;
    IBOutlet UILabel *lblTotale ;
    IBOutlet UITableView *tabella;
    NSMutableArray *lista;
   }

@property (nonatomic, retain) IBOutlet UITextField *txtPrimoAddendo;
@property (nonatomic, retain) IBOutlet UITextField *txtSecondoAddendo;
@property (nonatomic, retain) IBOutlet UILabel *lblTotale;
@property (nonatomic, retain) IBOutlet UITableView *tabella;
@property (nonatomic, retain) NSMutableArray *lista;

-(IBAction)somma ;
-(IBAction)listaPDF;

@end

视图控制器.m

    #import "VPViewController.h"

    @interface VPViewController ()

    @end

    @implementation VPViewController

    -(void)somma {

    int x = [[txtPrimoAddendo text] intValue];
    int y = [[txtSecondoAddendo text] intValue];
    int somma = x + y ;

    NSString *totale = [NSString stringWithFormat:@"La somma fa : %d", somma];

    [lblTotale setText:totale];
    [lblTotale setHidden:FALSE];


    }
    - (void)listaPDF {

    int contatore = 1;

    NSArray *dirFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[NSBundle mainBundle] resourcePath] error: nil];
    for (int i = 0; i < dirFiles.count ; i++) {

        NSString *files = dirFiles[i];
        int indice = files.length - 4 ;
        NSString *extension = [files substringFromIndex:indice];

        if([extension  isEqual: @".pdf"]) {

            NSLog(@"********* File PDF : %@", files);
            [lista insertObject:files atIndex:contatore];
            contatore++;
        }
    }
    [tabella reloadData];

    }

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return [lista count];
    }
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    static NSString *simpleTableIdentifier = @"CellID";

    UITableViewCell *cell = [tabella dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }
    cell.imageView.image = [UIImage imageNamed:@"pdf.png"];
    cell.textLabel.text = [lista objectAtIndex:indexPath.row];
    return cell;
    }


    - (void)viewDidLoad
    {
        tabella.delegate = self;
        tabella.dataSource = self;

        tabella = [[ UITableView alloc] init];
        lista = [[NSMutableArray alloc] init];

        [lista insertObject:@"FIRST ELEMENT" atIndex:0];


    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    }

    - (void)didReceiveMemoryWarning
    {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

-(BOOL)textFieldShouldReturn:(UITextField *)textField{
    [textField resignFirstResponder];
    return YES;
}

@synthesize lblTotale;
@synthesize txtPrimoAddendo;
@synthesize txtSecondoAddendo;
@synthesize tabella;
@synthesize lista;


@end

谢谢

4

2 回答 2

1

我已经按原样尝试了您的代码。

为什么你在 viewDidLoad 中初始化 UITableView 对象。如果您在 Xib 文件上添加,则不需要分配。如果您以编程方式创建 UITableView,那么它是必需的。只需注释/删除将调用初始化行和 tableView 的委托方法。

并且在“ListaPDF”函数中,没有项目被添加到数组“lista”中,这就是为什么在 UITableView 中看不到新条目的原因。

于 2013-10-07T11:27:14.267 回答
0

NSMutableArray索引从 0 开始 - 而不是 1

int contatore = 1;

...

[lista insertObject:files atIndex:contatore];
contatore++;

用于addObject将对象添加到NSMutableArray

[lista addObject:files];

删除所有实例变量,因为:

 @property (nonatomic, retain) NSMutableArray *lista;

创建一个名为_lista- notlista

你有很多向后的代码:

tabella.delegate = self;
tabella.dataSource = self;

tabella = [[ UITableView alloc] init];
lista = [[NSMutableArray alloc] init];

您正在尝试在分配表之前delegate设置and 。datasource

它应该是:

tabella = [[ UITableView alloc] init];
lista = [[NSMutableArray alloc] init];

tabella.delegate = self;
tabella.dataSource = self;

但是,UITableView已经在 Interface Builder 中添加了,对吧?

这意味着它已经为您创建了,您不应该在此处分配表。

另外:在Interface Builder中,您可以右键单击+拖动(或ctrl+leftclick+拖动)将您的连接UITableView到您UIViewControllerdelegatedatasource

于 2013-10-07T11:33:32.063 回答