2013-10-07 4 views
-1

Я ноб в программировании Obj-c. Я делаю приложение iPad, состоящее из ViewController, которое показывает мне 2 текстовых поля, кнопку в верхней части, чтобы сделать сумму.UITableview - не может перезагрузить данные

В том же Viewcontroller у меня есть TableView и кнопка. Этот Tableview первоначально показывает мне элемент, но я бы хотел обновить этот список, просто нажав кнопку.

Функция, связанная с кнопкой для обновления списка (событие с нажатием), называется «listaPDF».

Viewcontroller.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 

Viewcontroller.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 

Благодаря

ответ

1

Я попробовал ваш код, как это.

Почему вы инициализируете объект UITableView в viewDidLoad. Его не нужно выделять, если вы добавляете файл Xib. Если вы создаете UITableView Programmatically, то это необходимо. Просто прокомментируйте/удалите эту инициализирующую строку и вызовите методы делегата tableView.

И в функции «ListaPDF» в массив «lista» не добавляются элементы, поэтому в UITableView не было видно никакой новой записи.

+0

Отлично! Теперь работает. Спасибо! – user2854276

+0

Не могли бы вы отметить его как правильный ответ и проголосовать. –

0

NSMutableArray индексы начинаются с 0 - не 1

int contatore = 1; 

...

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

Использование addObject для добавления объекта в NSMutableArray

[lista addObject:files]; 

Удалить все экземпляра переменные, потому что это:

@property (nonatomic, retain) NSMutableArray *lista; 

создает переменную экземпляра с именем _lista - не lista

У вас есть совсем немного кода обратной:

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

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

Вы пытаетесь установить delegate и datasourceперед таблицу выделяется.

Оно должно быть:

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

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

Однако UITableView был добавлен в Interface Builder, верно?

Это означает, что он уже создан для вас, и вы не должны выделять таблицу здесь.

также: внутри Interface Builder вы можете щелкните правой кнопкой мыши + перетаскивание (или Ctrl + LeftClick + перетаскивание) для подключения к вашему UITableViewUIViewController как его delegate и datasource

+0

Спасибо! С вашим ответом и ответом Шабы теперь он работает! – user2854276

Смежные вопросы