如何在字符串中获取uitableview单元格的getlcell.label.text值

时间:2014-12-16 04:44:39

标签: uitableview checkbox

我正在制作一个应用程序,我正在使用tableview,在每个表格单元格中我使用复选框。现在我被困在这个地方,当复选框被选中时,我希望获得该表格单元格的值。就像我在表格单元格中显示消息ID我想要获取其复选框被选中的单元格的messages_Id。表示如果选择1复选框,其消息ID存储在NSString中,如果我选择2个复选框,则这些复选框中的2条消息将以字符串形式存储如何完成。下面是我的示例代码tableview和复选框操作

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

    static NSString *tableviewidentifier = @"cell";
   __block  tablecellTableViewCell *cell= [self.activitiesTableView_ dequeueReusableCellWithIdentifier:tableviewidentifier];

    if(cell==nil)
    {
        cell = [[tablecellTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:tableviewidentifier];
    }if(indexPath.row == [self tableView:tableView numberOfRowsInSection:indexPath.section] - 1){

    }
     __block NSString *row = [NSString stringWithFormat:@"%ld",(long)indexPath.row];

    cell.titlename.text=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"offerTitle"];


    tocity.text=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"toCity"];
    fromcity.text=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"fromCity"];
   date.text=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"messageDate"];
    time.text=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"messageTime"];
    [cell.button setBackgroundImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal];
    [cell.button setImage:nil forState:UIControlStateNormal];






    if ([self.checkimageArray containsObject:[self.lblArray objectAtIndex:indexPath.row]])
    {


        [cell.button setImage:[UIImage imageNamed:@"tick.png"]// here i am setting image
                             forState:UIControlStateNormal];
        cell.contentView.backgroundColor=[UIColor colorWithRed:(245/255.0) green:(245/255.0) blue:(245/255.0) alpha:1];
    }
    else
    {
        cell.backgroundColor=[UIColor clearColor];
    }

    cell.button.tag=indexPath.row;
    [cell.button addTarget:self action:@selector(checkButton:) forControlEvents:UIControlEventTouchUpInside];



    return cell;

}

以下是我的复选按钮代码

-(IBAction)checkButton:(UIButton *)sender
{
    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tblvie];
    NSIndexPath *indexPath = [self.tblvie indexPathForRowAtPoint:buttonPosition];

    if ([self.checkimageArray containsObject:[self.lblArray objectAtIndex:indexPath.row]]) {
        [self.checkimageArray removeObject:[self.lblArray objectAtIndex:indexPath.row]];
        self.titleLabel.text=@"";

    }
    else {
        [self.checkimageArray addObject:[self.lblArray objectAtIndex:indexPath.row]];
         self.titleLabel.text=[NSString stringWithFormat:@"%ld selected",(long)sender.tag+1];
    }
    [self.tblvie reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation: UITableViewRowAnimationFade];


}

我希望在此按钮中获取这些复选框的值

- (IBAction)menubtun:(id)sender {

}

1 个答案:

答案 0 :(得分:1)

如果想要所选单元格的单元格信息,只需在自定义单元格中处理tickButton的动作方法,而不是在控制器使用下面的代码定义协议并定义委托,请参阅下面的代码

tablecellTableViewCell.h

中的

#import <UIKit/UIKit.h>
@class tablecellTableViewCell;

@protocol CustomCellDelegate <NSObject>
- (void)checkBoxButtonSelected:(tablecellTableViewCell *)cell; //this is the custom delegate method
@end



@interface tablecellTableViewCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UIImageView *profileImageView; //i changed the name for conventions 
@property (weak, nonatomic) IBOutlet UIButton *tickButton;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel; //valuedate
@property (weak, nonatomic) IBOutlet UILabel *messageLabel;
@property (weak, nonatomic) IBOutlet UILabel *dateLabel;
@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activityIndicatorView;


@property (weak, nonatomic) id<CustomCellDelegate> cellDelegate; //decleare a delegate hear

- (void)setFont:(UIFont *)font withString:(NSString *)title;

@end

并且在tablecellTableViewCell.m中所有代码都相同,但您必须将操作连接到tickButton,例如

 #import "tablecellTableViewCell.h"

 @implementation tablecellTableViewCell
 //@synthesize button,image;  
 - (id)initWithFrame:(CGRect)frame
{
   self = [super initWithFrame:frame];
   if(self)
   {

   }
   return self;
}


- (void)awakeFromNib
{
   // Initialization code
   [super awakeFromNib];
   [self setUp];
}

//...same code of yours no need to change just a action method of tick button is added extra

//in this call a delegate method by passing the entire cell itself
- (IBAction)checkButtonAction:(id)sender
 {
   if([self.cellDelegate respondsToSelector:@selector(checkBoxButtonSelected:)])
   {
       [self.cellDelegate checkBoxButtonSelected:self];//hear u are passing the enire cell to Fbinbox..controller
   }
 }  

在控制器类.h file

//..same code just confirm to protocol 
 @interface inboxViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,UIActionSheetDelegate,CustomCellDelegate> //confirm to protocol
{
   int checkBoxesCount;
}
.m file

中的

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
    __block  tablecellTableViewCell *cell= [tableView dequeueReusableCellWithIdentifier:tableviewidentifier];
    if(cell == nil)
    {
       cell = [[tablecellTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:tableviewidentifier];
    }
    if(indexPath.row == [self tableView:tableView numberOfRowsInSection:indexPath.section] - 1)
    {

    }
    __block NSString *row = [NSString stringWithFormat:@"%ld",(long)indexPath.row];
    cell.activityIndicatorView.hidden = NO;
    [cell.activityIndicatorView startAnimating];
    if([[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"messageRead"] intValue]==0)
    {
       cell.contentView.backgroundColor=[UIColor colorWithRed:(245/255.0) green:(245/255.0) blue:(245/255.0) alpha:1];
    }
    else
    {
       cell.contentView.backgroundColor=[UIColor clearColor];
    }
   cell.messageLabel.text = [[self.inboxmessagesarray   objectAtIndex:indexPath.row]objectForKey:@"toCity"];
   cell.cellDelegate      = self;//add this one line

   //... rest same code but comment the action method of tick button

   //..hear in the last 
   cell.tickButton.tag = indexPath.row;
   // [cell.tickButton addTarget:self action:@selector(checkButton:) forControlEvents:UIControlEventTouchUpInside]; //comemnt this line this tickbutton   action is in custom cell


 }

 //now define custom delegate method 
 - (void)checkBoxButtonSelected:(tablecellTableViewCell *)cell //in this cell contains every thing including message and all 
 {
   //hear u are getting the entire cell
   //now u can get the all info stored in this cell
   NSIndexPath *indexPath = [self.activitiesTableView_ indexPathForCell:cell];

   if ([self.checkimageArray containsObject:[self.lblArray objectAtIndex:indexPath.row]]) {
     [self.checkimageArray removeObject:[self.lblArray objectAtIndex:indexPath.row]];
     //....other stuff's
     //cell.textLabel.text;
     //..all info present in the cell
   }
   else
   {
     [self.checkimageArray addObject:[self.lblArray objectAtIndex:indexPath.row]];
     //..do other stuff
     NSString *selectedMessage = cell.messageLabel.text;
     //cell.textLabel.text;
     //..all info present in the cell
     NSLog(@"SELECTED MESSAGE->%@",selectedMessage);

  }
  [self.activitiesTableView_ reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation: UITableViewRowAnimationFade];
}