好的我有一个带有UIActionSheet的tableView,并且没有segue或任何长的行。用户可以选择滑动并删除行或其他选项,以便将行所代表的用户再次脱机。
当用户滑动时,他们可以删除该行。 当用户点击弹出的UIActionsheet时,会弹出“脱机”选项(破坏性按钮)或取消。
这都包含在tableView委托方法中:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"%d", [indexPath row]);
Person *person = [people objectAtIndex:indexPath.row];
UIActionSheet *popup = [[UIActionSheet alloc] initWithTitle:[NSString stringWithFormat:@"Need to edit %@'s info?", person.name]
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:@"Take Offline"
otherButtonTitles:nil, nil];
[popup showInView:tableView];
[popup addButtonWithTitle:@"Cancel"];
[people removeObjectAtIndex:[indexPath row]];
[tableView reloadData];
}
我通常会使用UIActionSheetDelegate方法来检测按钮的敲击。
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
NSLog(@"Button 1 was clicked");
}
}
我遇到的问题是,当我在表格中点击一行时,对象将从数组中删除,并且表格会立即重新加载。
我不希望这种情况发生,直到单击“脱机”按钮但无法找到实现此目的的方法。我尝试了一个未来,例如在实例变量中存储对象并从其他方法访问它们并尝试从tableView方法执行代码但是让我自己感到困惑。
这样做的最佳方式是什么?
亲切的问候
答案 0 :(得分:2)
我写了一篇关于如何(以及为什么)添加块回调以提醒视图,操作表和动画的博客文章:
http://blog.innovattic.com/uikitblocks/
使用这种方法,您不必使用委托,而是可以改写tableView:didSelectRowAtIndexPath:
方法,如下所示:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"%d", [indexPath row]);
Person *person = [people objectAtIndex:indexPath.row];
UIActionSheet *popup = [[UIActionSheet alloc] initWithTitle:[NSString stringWithFormat:@"Need to edit %@'s info?", person.name]
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:@"Take Offline"
otherButtonTitles:nil, nil];
[popup setHandler:^(UIActionSheet *sheet, NSInteger buttonIndex) {
[people removeObjectAtIndex:[indexPath row]];
[tableView reloadData];
} forButtonAtIndex:[popup destructiveButtonIndex]];
[popup showInView:tableView];
}
您可以从GitHub下载源文件:
答案 1 :(得分:0)
嗯,你说你尝试过的方法是正确的。
您需要在属性中保留对所选Person
的引用。声明这样的属性:
@property (nonatomic, strong) Person *selectedPerson;
并在didSelectRow...
方法中将所选人员存储在此媒体资源中。然后,使用UIActionSheetDelegate方法确定用户单击的按钮。如果他们点击“脱机”,则从selectedPerson
阵列中移除您存储在people
媒体资源中的人。