动态填充UITableView [英] Populating UITableView dynamically

查看:50
本文介绍了动态填充UITableView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码从URL提取数据,将其存储在数组中,并在表中显示.

I have the following code to fetch the data from URL, store it in arrays, and display it inside the table.

现在的问题是我的URL,它根据单击按钮更改向表中馈送数据的URL,即,如果用户单击按钮[gainer],则会从与获取者相关的URL中获取数据.

Now the issue is my URL which is feeding data to the tables changes according to the button click i.e. If user clicks button [gainer], data gets fetched from URL related to gainer and so on.

正如我在didLoad方法中所谓的gainer方法一样,最初会从相应的URL显示数据.但是在单击按钮时不会采取任何措施.原因是我正在用方法(获得者和松散者)填充数组,但是表在创建表时正在从数组中获取数据(此时数组为空).

As I have called gainer method in didLoad method, initially data is displayed from the respective URL.But on button click no action is taken. The reason is I'm populating the arrays in methods (gainer and looser) but table is fetching data from the arrays at the time of table creation(and arrays are empty at that point).

以编程方式创建表格时,我已经在设计视图中创建了按钮.

I have created button in design view while I'm creating table programmatically.

fetchdataViewController.h

#import <UIKit/UIKit.h>

@interface fetchdataViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>{
    IBOutlet UIWebView *webView;
    NSMutableArray *arr1;
    NSMutableArray *atarr;
    NSMutableArray *arr2;
    NSMutableArray *a;
    NSMutableArray *b;
    NSMutableArray *c;
    NSMutableArray *d;
    UITableView *aTableView;
}
-(IBAction)btnClicked:(id)sender;
-(IBAction)btnClicked1:(id)sender;
-(void)gainer;
-(void)looser;
@property(nonatomic,retain)NSMutableArray *arr1;
@property(nonatomic,retain)NSMutableArray *arr2;
@property(nonatomic,retain)NSMutableArray *atarr;
@property(nonatomic,retain)NSMutableArray *a;
@property(nonatomic,retain)NSMutableArray *b;
@property(nonatomic,retain)NSMutableArray *c;
@property(nonatomic,retain)NSMutableArray *d;
@property(nonatomic,retain)UIWebView *webView;
@property(nonatomic,retain)UITableView *aTableView;
@end

fetchdataViewController.m

#import "fetchdataViewController.h"

@implementation fetchdataViewController

NSMutableArray *atarr;
NSMutableArray *arr1;
NSMutableArray *arr2;
NSMutableArray *a;
NSMutableArray *b;
NSMutableArray *c;
NSMutableArray *d;
NSMutableString *mainstr;
NSMutableString *str;
@synthesize webView;
@synthesize arr1;
@synthesize arr2;
@synthesize atarr;
@synthesize a;
@synthesize b;
@synthesize c;
@synthesize d;
@synthesize aTableView;

int i,j;

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

    static NSInteger StateTag = 1;
    static NSInteger CapitalTag = 2;
    static NSInteger StateTag1 = 3;
    static NSInteger StateTag2 = 4;


    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil){
        cell=[[[UITableViewCell alloc]initWithFrame:CGRectZero reuseIdentifier:CellIdentifier]autorelease];
        CGRect frame;
        frame.origin.x = 10; 
        frame.origin.y = 5;
        frame.size.height = 35;
        frame.size.width = 170;


        UILabel *capitalLabel = [[UILabel alloc] initWithFrame:frame];
        capitalLabel.tag = CapitalTag;
        [cell.contentView addSubview:capitalLabel];     

        frame.origin.x += 125;
        UILabel *stateLabel = [[UILabel alloc] initWithFrame:frame];
        stateLabel.tag = StateTag;
        [cell.contentView addSubview:stateLabel];

        frame.origin.x += 100;
        UILabel *stateLabel1 = [[UILabel alloc] initWithFrame:frame];
        stateLabel1.tag = StateTag1;
        [cell.contentView addSubview:stateLabel1];


        frame.origin.x += 100;
        UILabel *stateLabel2 = [[UILabel alloc] initWithFrame:frame];
        stateLabel2.tag = StateTag2;
        [cell.contentView addSubview:stateLabel2];


    }
    UILabel *capitalLabel = (UILabel *) [cell.contentView viewWithTag:CapitalTag];
    UILabel *stateLabel = (UILabel *) [cell.contentView viewWithTag:StateTag];
    UILabel *stateLabel1 = (UILabel *) [cell.contentView viewWithTag:StateTag1];
    UILabel *stateLabel2 = (UILabel *) [cell.contentView viewWithTag:StateTag2];

    capitalLabel.text=[a objectAtIndex:indexPath.row];
    stateLabel.text = [b objectAtIndex:indexPath.row];
    stateLabel1.text = [c objectAtIndex:indexPath.row];
    stateLabel2.text = [d objectAtIndex:indexPath.row];


    return cell;
}


-(IBAction)btnClicked:(id)sender{
    [self gainer];
}

-(IBAction)btnClicked1:(id)sender {

    [self looser];
}

-(void)gainer{
    arr1=[[NSMutableArray alloc]init];
    arr2=[[NSMutableArray alloc]init];
    a=[[NSMutableArray alloc]init];
    b=[[NSMutableArray alloc]init];
    c=[[NSMutableArray alloc]init];
    d=[[NSMutableArray alloc]init];

    NSURL *url=[NSURL URLWithString:@"http://ipad.idealake.com/default.aspx?id=G"];
    NSURLRequest *req=[NSURLRequest requestWithURL:url];
    [webView loadRequest:req];

    //storing page data in string
    mainstr=[[NSMutableString alloc] initWithContentsOfURL:url];
    atarr=[mainstr componentsSeparatedByString:@"@"];

    NSString *str2;
    NSString *str3;
    for(int i=0; i<[atarr count]-1; i++)
    {
        // NSLog(@"i=:%i",i); 

        NSMutableString *str = [atarr objectAtIndex:i];
        if (str!= nil)            
            arr1=[str componentsSeparatedByString:@";"];
            for (int k=0;k<[arr1 count];k++)
            {                
                str2 = [arr1 objectAtIndex:k];                
                [arr2 addObject:str2];
                            }


        }
        else
        {
            //NSLog (@"Nill");
        }

    }
    for(int l=0;l<[arr2 count]/4;l++){
        str3=[arr2 objectAtIndex:4*l];
        [a addObject:str3];

        str3=[arr2 objectAtIndex:(4*l)+1];
        [b addObject:str3];

        str3=[arr2 objectAtIndex:(4*l)+2];
        [c addObject:str3];

        str3=[arr2 objectAtIndex:(4*l)+3];
        [d addObject:str3];
    }    
}

-(void)looser{

    arr1=[[NSMutableArray alloc]init];
    arr2=[[NSMutableArray alloc]init];
    a=[[NSMutableArray alloc]init];
    b=[[NSMutableArray alloc]init];
    c=[[NSMutableArray alloc]init];
    d=[[NSMutableArray alloc]init];

    NSURL *url=[NSURL URLWithString:@"http://ipad.idealake.com/default.aspx?id=L"];
    NSURLRequest *req=[NSURLRequest requestWithURL:url];
    [webView loadRequest:req];

    mainstr=[[NSMutableString alloc] initWithContentsOfURL:url];
    atarr=[mainstr componentsSeparatedByString:@"@"];

    NSString *str2;
    NSString *str3;
    for(int i=0; i<[atarr count]-1; i++)
    {

        NSMutableString *str = [atarr objectAtIndex:i];
        if (str!= nil)
        {

            arr1=[str componentsSeparatedByString:@";"];
            for (int k=0;k<[arr1 count];k++)
            {

                str2 = [arr1 objectAtIndex:k];
                [arr2 addObject:str2];
            }          

        }
        else
        {
            //NSLog (@"Nill");
        }

    }
    for(int l=0;l<[arr2 count]/4;l++){
        str3=[arr2 objectAtIndex:4*l];
        [a addObject:str3];

        str3=[arr2 objectAtIndex:(4*l)+1];
        [b addObject:str3];

        str3=[arr2 objectAtIndex:(4*l)+2];
        [c addObject:str3];

        str3=[arr2 objectAtIndex:(4*l)+3];
        [d addObject:str3];
    }
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    arr1=[[NSMutableArray alloc]init];
    arr2=[[NSMutableArray alloc]init];
    a=[[NSMutableArray alloc]init];
    b=[[NSMutableArray alloc]init];
    c=[[NSMutableArray alloc]init];
    d=[[NSMutableArray alloc]init];

    [self gainer];
    [super viewDidLoad];

    aTableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen]applicationFrame] style:UITableViewStyleGrouped];
    aTableView.dataSource = self;
    aTableView.delegate = self;
    aTableView.frame = CGRectMake(0, 10, 720, 500);
    [self.view addSubview:aTableView];

    [super viewDidLoad];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return YES;
}

@end

UPDATE

UPDATE

当我运行以下代码时,我将得到此输出.我最关心的是灰色阴影部分.

When I run the below code, I get this output. That shaded grey portion is my main concern.

感谢

THANKS IN ADVANCE

推荐答案

您需要通过调用reloadData告诉UITableView数据已更改.

You need to tell your UITableView that the data has changed by calling reloadData.

这篇关于动态填充UITableView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆