0

我注意到,当我设置 MessageTableViewCell accessoryType =UITableViewCellAccessoryDe​​tailDisclosureButton并在“箭头按钮”本身上进行选项卡时,在didSelectRowAtIndexPath: 上声明的弹出菜单不显示??!!!如果我在单元格的其他区域(“箭头按钮”本身除外)上进行选项卡,它工作正常,

但是,如果我改用UITableViewCellAccessoryDisclosureIndicator单元格附件类型,它可以正常工作,即使我在箭头本身上加了标签。

我想知道这是正常行为,错误还是我做错了什么。

我更喜欢UITableViewCellAccessoryDe​​tailDisclosureButton,因为在我看来,当你想引起用户的注意时,它会更清楚。

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

        MessageTableViewCell* cell = (MessageTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil)
        {
            cell = /*[*/[[MessageTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] /*autorelease]*/;

        }
        CastNearAppDelegate *appDelegate = (CastNearAppDelegate *)[[UIApplication sharedApplication] delegate];


        Message* message = [appDelegate.dataModel messageWithID: indexPath.row];

        if (!message.isSentByUser)
        {
            cell.accessoryType =/*UITableViewCellAccessoryDetailDisclosureButton; */UITableViewCellAccessoryDisclosureIndicator;
        }else
        {
            cell.accessoryType = UITableViewCellAccessoryNone;
        }

        message.bubbleSize = [SpeechBubbleView sizeForText:message.text];

        [cell setMessage:message];

        return cell;
    }

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {




       UIActionSheet  *popupQueryOptions = [[UIActionSheet alloc]
                                          initWithTitle:@"Options for Blocking and Spam Reporting"
                                          delegate:self
                                          cancelButtonTitle:@"Cancel"
                                          destructiveButtonTitle:@"Block Sender"
                                          otherButtonTitles:/*@"Block Sender",*/
                                          @"Inappropriate Content",
                                          /*@"Tell a Friend via Facebook",
                                           @"Tell a Friend via Twitter",*/
                                          nil];

        popupQueryOptions.actionSheetStyle = UIActionSheetStyleBlackOpaque;

        [popupQueryOptions showInView:[UIApplication sharedApplication].keyWindow];


}
4

2 回答 2

2

它们用于不同的事情。指示器只是一个指示器,而按钮允许您执行不同的操作,例如像按钮一样操作。

UITableView有两种可能的方法,当点击单元格时它将调用它的委托。

当行本身被点击时,将调用以下内容

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

当您点击附件时,tableView 会调用

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath

您也可以在 Interface Builder 中独立连接它们。所以这种行为是相当刻意的。

于 2013-02-11T14:57:09.403 回答
1

当您使用公开按钮时,将tableView:accessoryButtonTappedForRowWithIndexPath:调用委托方法而不是tableView:didSelectRowAtIndexPath:.

公开按钮通常用于小区的某种辅助操作,例如在 Wifi 设置中,它显示网络选项,同时点击整个小区连接到它。

于 2013-02-11T14:58:24.297 回答