Tuesday, February 28, 2012

add uiview at row selection


I want when tab on row a uiview containing two button appear at the center of the cell, so I did the following code




- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

//how can I get the text of the cell here?
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

UIView *v = [[UIView alloc] init];

v.center = cell.center;

UIButton*button1 =[[UIButton alloc] init];

button1.frame = CGRectMake(v.center.x - 5 , v.center.y , 5 , v.center.y + 4 );
button1.titleLabel.text = @"I'm label 1";

[v addSubview: button1];

UIButton*button2 =[[UIButton alloc] init];

button2.frame = CGRectMake(v.center.x - + 1 , v.center.y , 5 , v.center.y + 4 );
button2.titleLabel.text = @"I'm label 2";

[v addSubview: button2];

[cell addSubview:v];

/*
<#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
// ...
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
*/
}



the uiview doesn't appear any idea how to solve that



Best regards

3 comments:

  1. initWithFrame is the designated initialiser for views.

    Since you are using init it doesn't know how large a view to create.

    Also UIButton *button1 = [[UIButton alloc] init]; is incorrect. UIButtons are created with the buttonWithType: class method.

    ReplyDelete
  2. UIView *v = [[UIView alloc] init];//You have not set the frame of the v;

    ReplyDelete
  3. try:

    [cell.contentView addSubview: v];


    It should work.

    Edit:
    Try this code. Give the frames accordingly, it will work.

    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(44, 100, 200, 200)];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(0, 0, 50, 50);
    [v addSubview:button];

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell.contentView addSubview:v];

    ReplyDelete