如何确定自定义UITableViewCell中的按钮单击?

时间:2013-11-15 10:51:44

标签: ios uitableview

我有一个带有Custom Cell和Section Header的TableView。标题显示国家和自定义细胞向我显示城市。

看起来像这样:

  

USA

     
      
  • 纽约

  •   
  • 洛杉矶

  •   
     

德国

     
      
  • 柏林

  •   
  • Frakfurt

  •   

每个Cell都有一个Button。按下后,它将导航并将城市名称推送到详细视图。

问题是,我按下按钮后不知道如何确定城市名称。

我有一个解决方案,但它不再起作用了:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];
    StandortCell *cell = (StandortCell *)[tableView dequeueReusableCellWithIdentifier:@"ortCell"];
    [cell.detailButton setTag:indexPath.row];
    cell.ortLabel.text = [managedObject valueForKey:@"stadtname"];
}


- (IBAction)detailButton:(id)sender {

    UIView *contentView = [sender superview];
    UITableViewCell *cell = (UITableViewCell *)[contentView superview];
    NSIndexPath *cellIndexPath = [self.tableView indexPathForCell:cell];

    NSInteger section = cellIndexPath.section;

        UIButton * myButton = sender;
    int row=myButton.tag;

   NSIndexPath * indexPath = [NSIndexPath indexPathForRow:row inSection:section];

    StrasseViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"strasse"];
    self.selectedStandort = [self.fetchedResultsController objectAtIndexPath:indexPath];
    detail.currentStandort = self.selectedStandort;
    [self.navigationController pushViewController:detail animated:YES];

}

当我使用旧代码时,它将在第一部分显示正确的街道行。它没有检测到其他部分(国家);

当我选择第三部分中的第一个城市时。它将显示我在第一部分的第一个城市。

我希望你能帮助我。

2 个答案:

答案 0 :(得分:1)

使用它我希望它能解决你的目的。

在视图控制器中创建按钮按下方法

  • (IBAction)detailButton:(UIButton *)sender {

    CustomUITableViewCellName * cell =(CustomUITableViewCellName *)[[sender superview] superview]; NSIndexPath * cellIndexPath = [YOUR_TABLE_NAME indexPathForCell:cell];

}

对于ios 7,添加另一个超级视图。

现在通过这种方式,您将获得IndexPath并通过使用获取当前行 indexPath.row或indexPath.section。

您可以使用sender.title属性获取标题。

您可以在数组中使用此indexPath来获取所需的详细信息。

答案 1 :(得分:0)

您需要单独发送行和部分信息,以便将标记设为

标签=行* 1000 +部分。

现在使用row = tag / 1000从标记获取部分和行值  section = tag%1000

使用此值来制作正确的索引路径或找到一些更好的2分钟解决方案来获得它。

请注意,正确的解决方法是

  1. UIButton子类
  2. 在其中添加indexpath属性
  3. 使您的类生成按钮对象并且设置标记集indexpath属性。
  4. 在CustomButton.h中

    @interface CustomButton :UIButton
    @property (nonatomic,assign)NSIndexPath *path;
    @end
    
    CustomButton.m中的

    @implementation CustomButton
    @synthesize path;
    @end
    

    在表格视图单元格上使用此自定义按钮,而不是标记集路径属性