表视图单元格内的UIButton动作句柄

时间:2014-03-14 10:27:52

标签: ios dictionary uitableview

i have a table view like this

我有这样的表格视图。

我做的是,我为我的单元格创建了一个单独的类,并且我在.m文件中创建了IBAction,我为该单元格创建了该文件。

在我的TableViewController类中,我有一个由Web服务检索的字典。[我从中加载这些详细信息。]现在我想通过单击“接受”按钮将某些内容发送回我的Web服务。

由于我的详细信息字典在TableViewController类中,而IBAction在单独的类中,我不知道如何做到这一点。我知道如何做到这一点的逻辑。但我不知道如何从tableviewControler的cellForRowAtIndexPath方法中的字典变量中获取特定信息..

谁能给我一些想法?请...

编辑:

这里是我的cellForRowAtIndexPath方法

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
  {
  static NSString *CellIdentifier = @"Cell";
   TacleCell *cell = (TacleCell*)[tableView     dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

NSDictionary *tempDictionary= [self.googlePlaces objectAtIndex:indexPath.row];
NSString* FirstName = [[tempDictionary valueForKey:@"PatientProfile"]valueForKey:@"FirstName"];
NSString* LastName = [[tempDictionary valueForKey:@"PatientProfile"]valueForKey:@"LastName"];
//NSString* FullName = [NSString stringWithFormat:@"%@ %@",FirstName,LastName];

cell.Time.text = [NSString stringWithFormat:@"%@ - %@",[[[tempDictionary valueForKey:@"Appointment"]valueForKey:@"DayTimeSlot"]valueForKey:@"StartTime"], [[[tempDictionary valueForKey:@"Appointment"]valueForKey:@"DayTimeSlot"]valueForKey:@"EndTime"]];




cell.Name.text = [NSString stringWithFormat:@"%@ %@",FirstName,LastName];

cell.profileImage.image = [UIImage imageNamed:@"bookmark.png"];
// cell.textLabel.text = [[tempDictionary valueForKey:@"Appointment"]valueForKey:@"AgencyName"];

if([[tempDictionary valueForKey:@"Appointment"]valueForKey:@"AgencyId"] != NULL)
{
    cell.Date.text = [NSString stringWithFormat:@"AppoinmentID: %@",[[tempDictionary valueForKey:@"Appointment"]valueForKey:@"AgencyId"]];
}
else
{
    cell.Date.text = [NSString stringWithFormat:@"Not Rated"];
}

return cell;

}

在tempDictionary中我有一些东西可以使用。该值应该通过按下“接受”按钮传递给服务..这就是我想要做的事情

4 个答案:

答案 0 :(得分:1)

委托模式正是您所需要的。这是一个good documentation。 您应该TableViewController delegate tableViewCell @class MYCell; @protocol MYCellDelegate <NSObject> - (void)buttonTappedInCell:(MYCell *)cell; @end @interface MYCell : UITableViewCell @property (weak, nonatomic) id<MYCellDelegate> delegate; @end

MYCell.h:

...
- (IBAction)buttonCliked:(id)sender
{
    [self.delegate buttonTappedInCell:self];
}

MYCell.m:

...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath     *)indexPath
{
    MYCell *cell = /// Create your cell
    cell.delegate = self;

    return cell;
}

- (void)buttonTappedInCell:(MYCell *)cell
{
   ///  Send something back to your web service 
}

MYTableViewController.m:

{{1}}

答案 1 :(得分:1)

在UITABLEVIEWDATASOURCE方法下面,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)
{
// give buttons to your cell`s contentview.

then,
[Acceptbutton or CancelButton  addTarget:nil action:@selector(yourbtnselector:) forControlEvents:UIcontrolEventTouchUPInside];

}

然后, 在按钮选择器中,

-(voide)ButtonSelector: (id)sender
{

if(sender == accept Button)
{
// DO your Stuff.
}

if(sender == Cancel Button)
{
// DO your Stuff.
}


}

所以,你不需要为你的案例实现Tableview didselectrow方法。

答案 2 :(得分:1)

在@dariaa的解决方案之后回答您的疑问是当您点击将调用MyCell类中的操作方法的按钮时,再次通过该方法删除切换控件([self.delegate buttonTappedInCell:self])以及参数self(当前类对象)到单击按钮的控制器类。

答案 3 :(得分:0)

有2个简单的解决方案:

  • 使用自定义协议。在这里a link
  • 使用键值观察。这是a link

我建议使用自定义协议。