我有这样的表格视图。
我做的是,我为我的单元格创建了一个单独的类,并且我在.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中我有一些东西可以使用。该值应该通过按下“接受”按钮传递给服务..这就是我想要做的事情
答案 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)