从 UITableViewCell 中的详细信息披露按钮显示 UIPopoverController
Posted
技术标签:
【中文标题】从 UITableViewCell 中的详细信息披露按钮显示 UIPopoverController【英文标题】:Show a UIPopoverController from a detail disclosure button in a UITableViewCell 【发布时间】:2010-07-03 13:30:27 【问题描述】:我正在为 iPad 创建一个应用程序,我想显示一个 UIPopoverController
,并带有一个指向它所属行的详细信息披露按钮的箭头。我想在tableView:accessoryButtonTappedForRowWithIndexPath:
方法中执行此操作。目前我有这个,有一个假人CGRect
:
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
// Dismiss in the case it shows itself somewhere else
[addFeedPopup dismissPopoverAnimated:YES];
// Set up
TNSubscribeToFeedController *subscribeToFeedController = [[TNSubscribeToFeedController alloc] initWithNibName:@"SubscribeToFeed" bundle:nil];
UINavigationController *subscribeToFeedNavigationController = [[UINavigationController alloc] initWithRootViewController:subscribeToFeedController];
subscribeToFeedController.title = @"Subscribe to feed";
subscribeToFeedController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:nil];
subscribeToFeedController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:nil];
/*
* Note that we use the UINavigationController pure for the nices UINavigationBar.
*/
// Show in popup
addFeedPopup = [[UIPopoverController alloc] initWithContentViewController:subscribeToFeedNavigationController];
addFeedPopup.popoverContentSize = CGSizeMake(480, 320);
[addFeedPopup presentPopoverFromRect:CGRectMake(0, 0, 20, 20) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
// Memory
[subscribeToFeedNavigationController release];
[subscribeToFeedController release];
另外,当UITableView
处于编辑模式时,详细信息显示按钮在左侧大约 60 像素,因为我使用它来设置我的行:
if (cell == nil)
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"SectionTwoCell"] autorelease];
cell.textLabel.text = [NSString stringWithFormat:@"Feed %d", indexPath.row];
cell.detailTextLabel.text = @"Description";
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
cell.editingAccessoryType = cell.accessoryType;
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//
// TWO LINES BACK DEAR SO USER //
谁能帮我解决这个问题?谢谢。
哦,在UIPopoverController
关闭之前是否也可以禁用滚动和禁用选择任何内容(完美主义)?
【问题讨论】:
【参考方案1】:要做你想做的,你需要一个附件视图并且设置附件类型不会创建一个。但是,如果您创建一个按钮并将其设置为 cell.accessoryView,它将起作用。
在创建cell时创建并设置accessoryView:
...
UIButton *disclosureButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[disclosureButton addTarget:self action:@selector(discloseDetails:) forControlEvents:UIControlEventTouchUpInside];
cell.accessoryView = disclosureButton;
...
将 tableView:accessoryButtonTappedForRowWithIndexPath: 替换为 revealDetails:。这看起来很像你以前的,所以我只把更改放在下面:
- (void) discloseDetails:(UIButton *)sender
...
UITableViewCell *cell = (UITableViewCell *) sender.superview;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; // if needed
[addFeedPopup presentPopoverFromRect:cell.accessoryView.bounds inView:cell.accessoryView permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
...
如果你不需要单元格,它可以变得更简单:
- (void) discloseDetails:(UIButton *)sender
...
[addFeedPopup presentPopoverFromRect:sender.bounds inView:sender permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
...
这就是它的样子
【讨论】:
以上是关于从 UITableViewCell 中的详细信息披露按钮显示 UIPopoverController的主要内容,如果未能解决你的问题,请参考以下文章