How to display the UITableView programmatically?

前端 未结 4 1215
温柔的废话
温柔的废话 2020-12-13 14:15

I want to ask a question about the UITableView of the objective C. I am writing a program and I would like to create the UI programmatically. However, I don\'t know how to d

相关标签:
4条回答
  • 2020-12-13 14:48

    Something like this should do the trick (assuming this is running from within your view controller and you have a property set up for the table view):

    tableView = [[[UITableView alloc] initWithFrame:CGRectMake(...) style:UITableViewStylePlain] autorelease];
    tableView.dataSource = self;
    tableView.delegate = self;
    
    [self.view addSubview:tableView];
    

    Where you replace CGRectMake(...) with whatever position / size you'd like.

    0 讨论(0)
  • 2020-12-13 15:03

    Maybe its also helpful for you all who new in there.

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // init table view
        tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
    
        //or, you may do that 
        //tableView = [[UITableView alloc] init];
        //tableView.frame = CGRectMake:(5 , 5 , 320 , 300);
    
        // must set delegate & dataSource, otherwise the the table will be empty and not responsive
        tableView.delegate = self;
        tableView.dataSource = self;
    
        tableView.backgroundColor = [UIColor cyanColor];
    
        // add to canvas
        [self.view addSubview:tableView];
    }
    
    #pragma mark - UITableViewDataSource
    // number of section(s), now I assume there is only 1 section
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)theTableView
    {
        return 1;
    }
    
    // number of row in the section, I assume there is only 1 row
    - (NSInteger)tableView:(UITableView *)theTableView numberOfRowsInSection:(NSInteger)section
    {
        return 1;
    }
    
    // the cell will be returned to the tableView
    - (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *cellIdentifier = @"HistoryCell";
    
        // Similar to UITableViewCell, but 
        JSCustomCell *cell = (JSCustomCell *)[theTableView dequeueReusableCellWithIdentifier:cellIdentifier];
        if (cell == nil) {
            cell = [[JSCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        }
        // Just want to test, so I hardcode the data
        cell.descriptionLabel.text = @"Testing";
    
        return cell;
    }
    
    @end
    
    0 讨论(0)
  • 2020-12-13 15:06

    after writing above code you have to implement delegate method of UITableView.

    these are delegate method of UITableView load

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
        return 1;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return [your array count];
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        static NSString *CellIdentifier = @"Cell";
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
        if (cell == nil) {
    
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    
        }
    
        // Configure the cell...
        cell.textLabel.text = [yourarray objectAtIndex:indexPath.row];
    
        return cell;
    
    }
    
    0 讨论(0)
  • 2020-12-13 15:11
    • Create a new class that inherits from UIViewController.
    • Make it conform to the UITableViewDataSource protocol.
    • Declare your table view.

    Your header file should be like the following:

    @interface MyViewController : UIViewController <UITableViewDataSource> {    
    
    }
    
    @property (nonatomic, retain) UITableView *tableView;
    
    @end
    

    In the viewLoad method of your class:

    • Create a table view using initWithFrame. Use dimensions 320x460 for full height. Remove 44 from height if you have a navigation bar and 49 if you have a tab bar.
    • Create a new view.
    • Add the table view to the new view.
    • Set the controller view to the new view.
    • Set the table view data source to your instance (self).
    • Implement the two required data source methods: tableView:cellForRowAtIndexPath and tableView:numberOfRowsInSection

    Your implementation file should be like the following:

    #import "MyViewController.h"
    
    @implementation MyViewController
    
    @synthesize tableView=_tableView;
    
    - (void)dealloc
    {
        [_tableView release];
    
        [super dealloc];
    }
    
    #pragma mark - View lifecycle
    
    - (void)loadView
    {
        UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 460.0) style:UITableViewStylePlain];
        self.tableView = tableView;
        [tableView release];    
    
        UIView *view = [[UIView alloc] init];
        [view addSubview:self.tableView];
        self.view = view;
        [view release];
    
        self.tableView.dataSource = self;
    }
    
    - (void)viewDidUnload {
        self.tableView = nil;
    
        [super viewDidUnload];
    }
    
    #pragma mark - Table view data source
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        static NSString *MyCellIdentifier = @"MyCellIdentifier";
    
        UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:MyCellIdentifier];
    
        if(cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyCellIdentifier] autorelease];
        }
    
        return cell;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
       return 5;
    }
    
    @end
    
    0 讨论(0)
提交回复
热议问题