2013-10-07 171 views
-1

我很喜歡Obj-c編程。我正在製作一個由ViewController組成的iPad應用程序,該應用程序向我展示了兩個文本框,一個位於上方的按鈕,僅用於作出總和。UITableview - 無法重新加載數據

在同一個ViewController中,我有一個TableView和一個Button。此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

我曾嘗試你的代碼,因爲它是。

爲什麼在viewDidLoad中初始化UITableView對象。如果您在Xib文件上添加,則不需要分配它。如果以編程方式創建UITableView,則需要它。只是評論/刪除初始化行和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]; 

你試圖設置delegatedatasource面前的桌子被分配。

它應該是:

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

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

然而UITableView已經Interface Builder中加入裏面,對不對?

這意味着它已經爲你創建,你不應該在這裏分配表。

另外:界面生成器裏面,您可以右擊+拖動(或Ctrl + leftclick +拖動)來連接UITableViewUIViewControllerdelegatedatasource

+0

謝謝!現在你的答案和Shabah的答案就可以實現了! – user2854276