我注意到当我设置MessageTableViewCell accessoryType = UITableViewCellAccessoryDetailDisclosureButton 并且我在“箭头按钮”本身上的选项卡时,在 didSelectRowAtIndexPath:上声明的弹出菜单不显示了?? !!!如果我在单元格的其他区域选项卡,除了“箭头按钮”本身,
之外,它可以正常工作但是,如果我使用 UITableViewCellAccessoryDisclosureIndicator 单元格附件类型,它就可以正常工作,即使我选中了箭头本身。
我想知道这种正常行为,错误,或者我做错了什么。
我更喜欢 UITableViewCellAccessoryDetailDisclosureButton ,因为在我看来,当你想引起用户注意时它会更清晰。
- (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];
}
答案 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设置中,它显示网络的选项,同时点击整个单元格连接到它。