这是UITableViewCellAccessoryDe​​tailDisclosureButton的正常行为

时间:2013-02-11 14:52:41

标签: ios objective-c xcode ios6

我注意到当我设置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];


}

2 个答案:

答案 0 :(得分:2)

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

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

当点击行本身时,以下称为

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

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

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

您也可以在Interface Builder中独立连接它们。所以这种行为是非常慎重的。

答案 1 :(得分:1)

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

公开按钮通常用于细胞的某种二次作用,例如,细胞。在Wifi设置中,它显示网络的选项,同时点击整个单元格连接到它。