从 RootViewController 类外部删除RowsAtIndexPaths

Posted

技术标签:

【中文标题】从 RootViewController 类外部删除RowsAtIndexPaths【英文标题】:deleteRowsAtIndexPaths from outside RootViewController class 【发布时间】:2011-05-29 19:59:00 【问题描述】:

我正在使用 XCode 的基于导航的应用程序模板来创建一个以 UITableView 为中心的应用程序。我在删除 tableView 中的某些行时遇到了一些问题。 在所有 tableViews 单元格中,我通过子类化 UITableViewCell 添加了一个按钮,如下所示:

TableViewCell.h:

@implementation TableViewCell
@synthesize button;  
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString*)reuseIdentifier


    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) 
        RoutinesAppDelegate *appDelegate = (RoutinesAppDelegate *) [[UIApplication sharedApplication]delegate];

        // Initialization code
        button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
        [button setFrame:CGRectMake(320.0 - 90.0, 6.0, 80.0, 30.0)]; 
        [button setTitle:@"Done" forState:UIControlStateNormal];
        [button addTarget:appDelegate action:@selector(routineDone) forControlEvents:UIControlEventTouchUpInside];
        button.hidden = YES;
        [self.contentView addSubview:button];       
    
    return self;

按下按钮时,将调用 RoutinesAppDelegate.m 中的方法“routineDone”。 该方法如下所示:

RoutinesAppDelegate.m
-(void) routineDone  
  
     if ([[NSFileManager defaultManager] fileExistsAtPath:[self todayListPath]])
     
        int indexToRemove = buttonIndex + 1;

        todayListArray = [NSMutableArray arrayWithContentsOfFile:[self    todayListPath]];
        [todayListArray removeObjectAtIndex:indexToRemove];
        [todayListArray writeToFile:[self todayListPath] atomically:YES];
     

此方法从 tableView 加载的数组中删除一个项目。这很好用。

我的问题: 单击按钮时,单元格不会从屏幕上删除。

在 RoutinesAppDelegate.m 我尝试使用

[tableView reloadData]

但它似乎不适用于 RootViewController 类之外。

如果我能以某种方式使用 deleteRowsAtIndexPaths 方法会很好,但我不知道如何从 RootViewController 类中的外部 commitEditingStyle 调用该方法。

所以我的问题是:如何让细胞消失? :)

【问题讨论】:

如何获得buttonIndex @Deepak 在didSelectRowAtIndexPath: 我输入的方法:appDelegate.buttonIndex=indexPath.row; 【参考方案1】:

没有看到所有代码很难说,但你可以尝试添加

        [todayListArray writeToFile:[self todayListPath] atomically:YES];
        [self.tableView reloadData];

此外,您不必保留该按钮,并且可能不必将其作为属性

【讨论】:

以上是关于从 RootViewController 类外部删除RowsAtIndexPaths的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个类调用函数

在 UINavigationController 类中设置 rootViewController

我可以创建的 RootViewController、AppDelegate 和 View Controller 类之间有啥区别?

Swift/iOS13 - UIApplication.shared.delegate.window?.rootViewController?.present() 来自自定义类

从 rootViewController 设置 UILabel 文本

用java控制流实现文件复制后,不能删除文件