使用UIButton自定义UITableViewCell:单击了哪个按钮?

Van*_*nel 3 uibutton uitableview ios

我正在开发一个带有最新SDK和XCode 4.2的iOS 4应用程序.

我有一个UITableView部分和自定义UITableViewCell.每个单元格都有一个UIButton,所有这些按钮都有相同的目标UIControlEventTouchUpInside.

这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString* cellIdentifier = @"CalendarCell";

    CalendarEventCell* cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil)
    {
        NSArray* topLevelObjects =  [[NSBundle mainBundle] loadNibNamed:@"CalendarEventCell" owner:nil options:nil];

        for(id currentObject in topLevelObjects)
        {
            if ([currentObject isKindOfClass:[CalendarEventCell class]])
            {
                cell = (CalendarEventCell *)currentObject;
                [cell.addToCalendarButton addTarget:self action:@selector(addEventToiCal) forControlEvents:UIControlEventTouchUpInside];
                break;
            }
        }
    }
...
}
Run Code Online (Sandbox Code Playgroud)

当用户触摸该按钮时,我怎么知道哪个部分和行是被单击的单元格?

Dav*_*dek 6

在按钮上放置一个标签.例如:

CalendarEventCell* cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if (cell == nil)
{
    NSArray* topLevelObjects =  [[NSBundle mainBundle] loadNibNamed:@"CalendarEventCell" owner:nil options:nil];

    for(id currentObject in topLevelObjects)
    {
        if ([currentObject isKindOfClass:[CalendarEventCell class]])
        {
            cell = (CalendarEventCell *)currentObject;
            [cell.addToCalendarButton addTarget:self action:@selector(addEventToiCal) forControlEvents:UIControlEventTouchUpInside];
            break;
        }
    }
}
cell.addToCalendarButton.tag = ((indexPath.section & 0xFFFF) << 16) |
                               (indexPath.row & 0xFFFF);
Run Code Online (Sandbox Code Playgroud)

您需要将选择器更改为@selector(addEventToiCal:)并将方法更新为-(void) addEventToiCal:(UIButton *)sender.

然后,您可以添加以下内容 -addEventToiCal:

if (!([sender isKindOfClass:[UIButton class]]))
    return;
NSUInteger section = ((sender.tag >> 16) & 0xFFFF);
NSUInteger row     = (sender.tag & 0xFFFF);
NSLog(@"Button in section %i on row %i was pressed.", section, row);
Run Code Online (Sandbox Code Playgroud)