Shakesbeer
Shakesbeer

Reputation: 523

How to dynamically update your UITableView when a button is pressed?

I'm stuck with a seemingly very simple app that I'm trying to develop

Basically, I have a UITable, and two buttons: red/blue

When a button is pressed, a row with corresponding title of that button is append to the table

enter image description here

I'm overwhelmed by how complicated UITableView has to be implemented (datasource, delegate, resuable identifier, etc)

Can anyone help me out with this, preferably show me detailed codes

For my Buttons, I have something like this

- (IBAction)buttonPressed:(UIButton *)sender{
    NSString *item = sender.currentTitle;
    [self.cellArray addObject:item];
    [self.myTable reloadData];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.cellArray.count;
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{
   static NSString *CellIdentifier = @"The Table Cell";

   self.myTableCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   if (self.myTableCell == nil) {
       self.myTableCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
   }
   self.myTableCell.textLabel.text = [self.cellArray objectAtIndex:indexPath.row];
   return self.myTableCell;
}

Upvotes: 1

Views: 3834

Answers (3)

Jerry
Jerry

Reputation: 961

I wanted to add that "One more thing, the compiler shows a warning says no reusable identifier. what exactly is that?" above...

His answer is correct, but to get rid of that compiler warning...

The tableviewcell of your tableview has to have an identifier. In IOS 5, in your storyboard, highlight the TableViewCell in your TableView, and enter a value in the Identifier. This must match the value in your code of the cell that you are creating.

Upvotes: 0

Damien Del Russo
Damien Del Russo

Reputation: 1048

I'd recommend subclassing UITableViewController, then override the dataSource and delegate methods and you should be good to go. Going straight to UITableView is more complicated without any obvious benefits.

You may not be using Core Data, but I still recommend this lecture because it hooks up a TableViewController and works great - all code included. Check it out:

http://www.stanford.edu/class/cs193p/cgi-bin/drupal/node/289

The lectures in iTunes U explain everything further.

Enjoy,

Damien

Upvotes: 0

Shubhank
Shubhank

Reputation: 21805

Since you are learning this..i will post a simple solution. Make add a member variable NSMutableArray *cellArrays;

initialize it in your viewDidLoad

in buttonPressed check;

if([@"red" isEqualToString:[YourButton titleForState:UIControlStateNormal]])
{
 [self.cellArrays addObject:@"red"];
}
else
{
 [self.cellArrays addObject:@"blue"];
}
[self.YOURTABLEVIEW reloadData];

Now in your table view datasource method

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.cellArrays.count;
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{
 //in between your code;
 YOURCELL.textlabel.text = [self.cellArrays objectAtIndex : indexpath.row];
}

Try this ..

Upvotes: 2

Related Questions