Search code examples
iphonexcode4uitableview

UIbutton in UITableViewCell in iPhone?


I'm new to objective-C and strucked at a point ..I'm adding a UILabel(Name),UIbutton(Cancel) in UITableViewCell and when I click on it UIButton it shows an alertView with two button Yes and No .When I go for Yes I have to get the corresponding UIlabel(Name) value of that cell.But I could not understand how to do it ? This is the code Im writing for creating a UILabel and UIButton..

-(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];
    }
    NSMutableDictionary *d = (NSMutableDictionary *) [arr objectAtIndex:indexPath.row];
 UILabel *name=[[UILabel alloc]initWithFrame:CGRectMake(10, 45, 320,15)];
    name .font=[UIFont boldSystemFontOfSize:12];        
    [name setTextAlignment:UITextAlignmentLeft];
    [name  setText:[d valueForKey:@"Name"]];
    name.tag=112;
    [cell addSubview:name];
    [name  release];    

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(100.0f, 50.0f, 75.0f, 30.0f);
    [btn setTitle:@"Delete Details" forState:UIControlStateNormal];   
    [cell addSubview:btn];
    [btn addTarget:self action:@selector(btnClicked:)
                             forControlEvents:UIControlEventTouchUpInside];

    return cell;     
}
- (IBAction)btnClicked:(id)sender

{



    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Are you sure" message:@"You want to delete Details" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil];
                          [alert show];
                          [alert release];    

}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex   
{
    if (buttonIndex == 0) 
    {
       [alertView dismissWithClickedButtonIndex:0 animated:YES]; 

     }
    else 
    {
        //I have to get the corresponding cells UILabel value. 
     }

Solution

  • Your buttons which you are creating should some how have a variable which points to which cell they are in.

        UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        btn.frame = CGRectMake(100.0f, 50.0f, 75.0f, 30.0f);
        [btn setTitle:@"Delete Details" forState:UIControlStateNormal];   
        [cell addSubview:btn];
        [btn addTarget:self action:@selector(btnClicked:)
                             forControlEvents:UIControlEventTouchUpInside];
    

    should be

        UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        // The below line will add a state to each button which you can use to later differentiate in your method: btnClicked
        [btn setTag:indexPath.row]; 
        btn.frame = CGRectMake(100.0f, 50.0f, 75.0f, 30.0f);
        [btn setTitle:@"Delete Details" forState:UIControlStateNormal];   
        [cell addSubview:btn];
        [btn addTarget:self action:@selector(btnClicked:)
                             forControlEvents:UIControlEventTouchUpInside];
    
    
    
       you can set some variable which is global to the class like "selectedRow". You can declare it on the top of the class after the line @implementation. Look for a line called
    
       @implementation yourClassName
    
       //Add the below declaration. This is a global variable in your class, which you can set in one method and access in other methods
       int selectedRow; 
    

    and in btnClicked

    //Add the below line
    selectedRow=[sender tag];
    

    and in the final method of alertView clickedAlert at

       // NSLog(@"Name selected is ",[arr objectAtIndex:selectedRow] objectForKey:@"Name"]);